PHPの代表的なフレームワークの1つであるsymfonyについてまとめます。元ネタはsymfonybook-ja1.0です。
symfonyプロジェクトのツリー構造
一般的なWebプロジェクトは以下のような内容で構成されます。
・データベースのファイル。MySQL、PostgreSQLなど
・静的なファイル(HTML、画像、JavaScriptファイル、スタイルシートなど)
・サイトのユーザーと管理者によってアップロードされたファイル
・PHPのクラスとライブラリ
・外部ライブラリ(サードパーティのスクリプト)
・バッチファイル(コマンドラインもしくはcron tableで起動するスクリプト)
・ログファイル(アプリケーションかつ/もしくはサーバーによって書き込まれるトレース)
・設定ファイル
symfonyはこれらすべての内容を編成する標準的なファイルのツリー構造を提供します。プロジェクト、アプリケーションもしくはモジュールを初期化する際に、これらは自動的に作成されます。
ルートのツリー構造
symfonyプロジェクトのルートにおけるツリー構造は以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
apps/ frontend/ backend/ batch/ cache/ config/ data/ sql/ doc/ lib/ model/ log/ plugins/ test/ unit/ functional/ web/ css/ images/ js/ uploads/ |
各ディレクトリの概要は以下の通りです。
●apps:プロジェクトのアプリケーションごとに1つのディレクトリがここに作成され、保存されます。(よく見かけるのはフロントオフィス用のfrontendとバックオフィス用backendです)
●batch:バッチ処理を実行する必要がある場合に、PHPスクリプトが保存されます。これらはコマンドラインもしくはcronスケジューラなどから呼び出されます。
●cache:設定ファイルをキャッシュファイル化したもの、(有効にした場合)アクションをキャッシュファイル化したもの、バージョン、そしてプロジェクトのテンプレートが含まれる。これらのキャッシュのメカニズムを利用してWebリクエストへのレスポンスを高速化しています。
●config:プロジェクトの一般的な設定ファイルが保存されます。
●data:プロジェクトのデータファイルが保存されます。たとえば、データベーススキーマ、テーブルを作成するSQLファイル、もしくはSQLiteデータベースファイルなど。
●doc:プロジェクトのドキュメントが保存されます。独自のドキュメントやPHPdocによって生成されたドキュメントも含みます。
●lib:外部クラスもしくは外部ライブラリ専用のディレクトリです。ここでは、アプリケーション間で共有が必要なコードを追加します。
●model:サブディレクトリはプロジェクトのオブジェクトモデルを保存します。
●log:symfonyによって直接生成されたアプリケーションのログファイルを保存します。Webサーバーのログファイル、データベースのログファイル、アプリケーション単位のログファイル、環境単位のログファイルをなど。
●plugins:アプリケーションにインストールされたプラグインが保存されます。
●test:PHPで記述されsymfonyのテストフレームワークと互換性のあるユニットテストと機能テストを含みます。
●web:Webサーバーに対するドキュメントルートです。インターネットからアクセスできるファイルはこのディレクトリに設置されたもののみです。
アプリケーションのツリー構造
アプリケーションディレクトリのツリー構造は以下のようになります。
1 2 3 4 5 6 7 8 9 10 |
apps/ [application name]/ config/ i18n/ lib/ modules/ templates/ layout.php error.php error.txt |
各ディレクトリの概要は以下の通りです。
●config:アプリケーションレベルの設定ファイルが保存されます。プロジェクトレベルの設定ファイルをオーバーライドします。
●i18n:アプリケーションの国際化のために使われるファイルが含まれます。インターフェイスの翻訳ファイルなど。
●lib:アプリケーションに固有のクラスとライブラリが含まれます。
●modules:アプリケーションの機能を含むモジュールが含まれます。
●templates:アプリケーションのグローバルテンプレートが保存される。グローバルテンプレートはすべてのモジュールで共通に使用されます。デフォルトではlayout.phpファイルが含まれ、このlayout.phpファイルはモジュールテンプレートが挿入されるメインのレイアウトとなります。
モジュールのツリー構造
アプリケーションは1つもしくは複数のモジュールを含み、それぞれのモジュールは独自のサブディレクトリをmodulesディレクトリ内に保有します。
典型的なモジュールディレクトリのツリー構造は以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 |
apps/ [application name]/ modules/ [module name]/ actions/ actions.class.php config/ lib/ templates/ indexSuccess.php validate/ |
各ディレクトリの概要は以下の通りです。
●actions:通常、actions.class.phpと呼ばれる単独のファイルを含んでいます。モジュールのすべてのアクションをこのファイルに記述することができます。(1つのモジュールの各アクションを複数のファイルに分割して記述することもできます)
●config:モジュールレベルの設定ファイルが保存されます。
●lib:モジュール固有のクラスとライブラリを保存できます。
●templates:モジュールのアクションに対応するテンプレートが含まれます。デフォルトのテンプレートの名前はindexSuccess.phpで、モジュールのセットアップ時に作成されます。
●validate:フォームのバリデーションに対して使われる設定ファイル専用ディレクトリです。
※config/、lib/、validate/ディレクトリはモジュール生成時は空です。
webディレクトリのツリー構造
webディレクトリは一般利用者がアクセスできるファイルのディレクトリで、そのツリー構造は次の通りです。
1 2 3 4 5 |
web/ css/ images/ js/ uploads/ |
各ディレクトリの概要は以下の通りです。
●css:css拡張子を持つスタイルシートが含まれます。
●images:.jpg、.pngもしくは.gif形式の画像が含まれます。
●js:.js拡張子を持つJavaScriptファイルが含まれます。
●uploads:ユーザーによってアップロードされたファイルが含まれます。