web-dev-qa-db-ja.com

PHPのプロジェクト構造

私はPHPが初めてで、PHPプロジェクトのディレクトリ構造を知りたいです。 Javaの経験があり、JavaにはsrcにJavaソースファイルが含まれ、WEB-INFにはlib、jspページが含まれます。 PHPに同様の標準ディレクトリ構造はありますか?また、Javaにレイヤーがあるように、PHPにレイヤー化していますか(例:Web、Service、DAOレイヤー)

いくつかのリンクを閲覧しました。しかし、それぞれが異なる答えを与えます。

2つの言語を比較できるかどうかはわかりません。私はただいくつかの標準に固執したいだけです。

前もって感謝します。

22
javafan

いや。 PHPはあなたが作ったものです。非常にシンプルなフラットファイルでも、あなたが望むものでも構いません。

そうは言っても、コーディング標準についてはいくつか合意されていますが、これらの標準の「施行」はありません。それらはPSR(PHP Standards Recommendation)と呼ばれます。ここに背景があります: http://net.tutsplus.com/tutorials/php/psr-huh/
ここで標準を1つずつ確認できます。 http://www.php-fig.org/psr/

ほとんどの主要なフレームワークはこれらの標準に準拠しており、使用する場合は、フローを使用する方が簡単かもしれません。

繰り返しますが、すべてのフレームワーク、プロジェクト、プラグイン、プログラムなどには、異なるプロジェクト構造を持つ異なるレイアウトがあります。一般的な構造は次のようなものです。

-framework_dir
-public_html
    -js
    -img
    -css
    -index.php
    -protected/private
        -controllers
        -models
        -views
        -etc

次に、.htaccessファイルは、保護されたディレクトリへのアクセスをブロックします。繰り返しますが、これはいくつかのフレームワークで見た一般的な表現です。個人的なプロジェクトを行っている場合は、自分にとって快適なものを使用してください。すべてのフレームワークは、異なるライブラリまたはデータにアクセスする方法を提供します。 「レイヤー」はありませんが、すべてのフレームワークにはさまざまな領域(電子メール、データベース、キャッシュ、http、ログなど)を処理するオブジェクトがあります。人気のあるものはたくさんあるので、自分の哲学やプロジェクトに合うものを見つけるのはあなた次第です。 5分間のブログビデオのいくつかを見て、どんなジャイブなのかを確認してから、数日間試してみてください。気に入らない場合は、別のスイッチに切り替えてください。

25
Tim Withers

Composerの発明により、人々はプロジェクトを世界中の消費者に登録する中心的な場所になり、他の人々はそのコードベースを見て類似性を確認できるようになりました。

結果は次のとおりです。 https://github.com/php-pds/skeleton

要するに:

If a package has a root-level directory for ...
                            ... then it MUST be named:
command-line executables    bin/
configuration files         config/
documentation files         docs/
web server files            public/
other resource files        resources/
PHP source code             src/
test code                   tests/

この標準では、srcまたはpublicの下に存在する必要があるディレクトリについて、これ以上の推奨事項はありません。 srcの下に名前空間を1つだけ用意し、「model」、「controllers」などの多様化を実装するには、完全修飾クラス名、 Projectname\Controller\WhateverControllerクラス、PSR-4互換パスに存在しますsrc/Controller/WhateverController.phpおよびComposer= with "autoload":{"psr-4":{"Projectname\\": "src"}}

4
Sven

バックエンドプロジェクトでは、Feature-basedフォルダー構造を使用する傾向があります。すべての機能フォルダーには、独自のコントローラー、マネージャー、およびルートファイルがあります。これはapi-backendsでうまく機能します。 https://blog.nikolaposa.in.rs/2017/01/16/on-structuring-php-projects/ のように見えます

たとえば、CustomerController、CustomerRepository、CustomerRoutesなどのCustomer機能があります。

私のフォルダ構造は次のようになります。

- build/
-- phpdox.xml
-- phpmd.xml
-- phpunit.dist.xml
- config/
- public/
-- .htaccess
-- index.php
-- assets/
- src/
-- Customer/
--- CustomerController.php
--- CustomerRepository.php
--- Customer.php
--- customer.routes.php
- tests/
- vendor/
composer.json
.gitignore
3
Gudgip

残念ながら(そうではない?)、PHPは非常に自由です。それはあなた次第です。

これが私の構造です:

framework/
controllers/             
models/
configs/
files/
templates/
themes/
tmp/
index.php
init.php
.htaccess

.htaccessを介してアクセスを制御できます。

3
Mr. B.

ライブラリでは、次の構造を使用しています...さらに、使用していない推奨事項を含めました(まだ)

PROJECT ROOT
|--composer.json
|--README.md
|--docs //for documentation files
|--tests //for Unit Tests
|--vendor //for external libraries (if everything isn't included through composer)
|--examples //examples of the library being used
|--config //any configuration files you may have
|--src  //where the library's actual code "lives"
   |--php //php source code, classes, any other scripts
   |--View //html views, but actually php files that output html
   |--Style //contains .css files
   |--Script //contains .js files
   |--Res   //contains other deliverable resource files. Could be mp3 files, json etc

現在、私はcomposer.jsonREADME.md、およびsrcのみをルートファイルの中で使用しています。しかし、その点に到達したら、私が説明したようにおそらく他のものを使用します。

決してこれが「正しい」とは思いません。また、このセットアップは、リクエストごとにphpルーターがあるためにのみ機能します。 .htaccessを使用すると、.cssファイルを/src/Style/requested_file.cssにルーティングできます。

プロジェクトのルートをクリーンアップしたかったので、それを達成しました。 PHP Fig にはありません [〜#〜] psr [〜#〜] ディレクトリ構造のため......私は知っています。 PSR-4、autoloader にはいくつかの標準があればいいのにと思っていましたが、ディレクトリ構造に関してはそうではありませんでした。

laravelwordpressPHP Mailer および その他のphpライブラリ を見て、例を見て、何ができるかを見てください一番好き

0
Reed