私はPHPが初めてで、PHPプロジェクトのディレクトリ構造を知りたいです。 Javaの経験があり、JavaにはsrcにJavaソースファイルが含まれ、WEB-INFにはlib、jspページが含まれます。 PHPに同様の標準ディレクトリ構造はありますか?また、Javaにレイヤーがあるように、PHPにレイヤー化していますか(例:Web、Service、DAOレイヤー)
いくつかのリンクを閲覧しました。しかし、それぞれが異なる答えを与えます。
2つの言語を比較できるかどうかはわかりません。私はただいくつかの標準に固執したいだけです。
前もって感謝します。
いや。 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分間のブログビデオのいくつかを見て、どんなジャイブなのかを確認してから、数日間試してみてください。気に入らない場合は、別のスイッチに切り替えてください。
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"}}
。
バックエンドプロジェクトでは、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
残念ながら(そうではない?)、PHPは非常に自由です。それはあなた次第です。
これが私の構造です:
framework/
controllers/
models/
configs/
files/
templates/
themes/
tmp/
index.php
init.php
.htaccess
.htaccessを介してアクセスを制御できます。
ライブラリでは、次の構造を使用しています...さらに、使用していない推奨事項を含めました(まだ)
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.json
、README.md
、およびsrc
のみをルートファイルの中で使用しています。しかし、その点に到達したら、私が説明したようにおそらく他のものを使用します。
決してこれが「正しい」とは思いません。また、このセットアップは、リクエストごとにphpルーターがあるためにのみ機能します。 .htaccess
を使用すると、.css
ファイルを/src/Style/requested_file.css
にルーティングできます。
プロジェクトのルートをクリーンアップしたかったので、それを達成しました。 PHP Fig にはありません [〜#〜] psr [〜#〜] ディレクトリ構造のため......私は知っています。 PSR-4、autoloader にはいくつかの標準があればいいのにと思っていましたが、ディレクトリ構造に関してはそうではありませんでした。
laravel 、 wordpress 、 PHP Mailer および その他のphpライブラリ を見て、例を見て、何ができるかを見てください一番好き