ディレクトリ構成
標準のディレクトリ構成
Curryはシステムのディレクトリ構成が既定の状態である上で動作するように設計されています。
標準のディレクトリ構成は以下のような状態です。
∟site
∟app
∟controllers
∟models
∟services
∟views
∟(cache)
∟(compile)
∟layouts
∟templates
∟configs
∟htdocs
∟css
∟images
∟js
∟.htaccess
∟index.php
∟logs
∟library
各ディレクトリの役割を以下に示します。
| app | MVCを構成するディレクトリ群を格納するディレクトリです。基本的にこの直下にファイルは配置しません。 |
| app/controllers | コントローラークラスのphpファイルを配置するディレクトリです。 コントローラーを階層化する場合はこの中にさらにサブディレクトリを作成します。 |
| app/models | モデルクラスのphpファイルを配置するディレクトリです。 |
| app/services | サービスクラスのphpファイルを配置するディレクトリです。サービスはモデルを取りまとめたり、メインロジックなどを担当したりします。 |
| app/views | ビューテンプレートを配置するディレクトリです。 実際は更に分類化されたディレクトリを格納しており、この直下に直接テンプレートファイルは配置しません。 |
| app/views/cache | CurryではテンプレートエンジンとしてSmartyを利用することを推奨していますが、
Smartyを利用した場合にSmartyのテンプレートキャッシュを保存するディレクトリです。 システムより書き込みが行われる為、パーミッションをシステムよりの書き込みが行える状態に適切に設定する必要があります。 このディレクトリはSmartyを利用しない場合は不要です。 |
| app/views/compile | Smartyを利用した場合にSmartyのコンパイル済みテンプレートを保存するディレクトリです。
システムより書き込みが行われる為、パーミッションをシステムよりの書き込みが行える状態に適切に設定する必要があります。 このディレクトリはSmartyを利用しない場合は不要です。 |
| app/views/layouts | ビューのレイアウトを格納するディレクトリです。 |
| app/views/templates | ビューテンプレートを格納するディレクトリです。 直下にコントローラーごとのサブディレクトリを配置し、その中にアクションごとのテンプレートファイルを配置します。 |
| configs | iniファイルなどの設定ファイルを配置します。 |
| htdocs | Web公開ルートディレクトリを想定したディレクトリです。 apacheのDocumentRootまたは、VirtualHostによってここをルートディレクトリに設定します。 |
| htdocs/css | cssファイルを配置するディレクトリです。この中に「コントローラー名.css」の名前でcssファイルを配置することで、対象のコントローラーのページ表示時に自動的に読み込まれます。 |
| htdocs/js | javascriptファイルを配置するディレクトリです。この中に「コントローラー名.js」の名前でjavascriptファイルを配置することで、対象のコントローラーのページ表示時に自動的に読み込まれます。 |
| htdocs/images | サイトで使用する画像を格納するディレクトリです。 |
| htdocs/.htaccess | apacheのmod_rewriteを利用する場合に必要な.htaccessファイルです。 ここのmod_rewriteの設定を行います。 |
| htdocs/index.php | スクリプトの起点としてかならず最初に処理が開始されるphpファイルです。 システム共通の基本設定などを行う場合はここに書きます。 |
| logs | ログ出力を行う場合にここへ出力します。 システムより書き込みが行われる為、パーミッションをシステムよりの書き込みが行える状態に適切に設定する必要があります。 |
| library | システム共通で使用する独自の汎用的なライブラリクラスのphpファイルを配置するディレクトリです。必要に応じてクラスを作成し、LoaderクラスのloadLibraryなどで読み込むことが可能です。 |
カスタマイズ
ディレクトリ構成はカスタマイズすることができます。
Curryのディレクトリ構成はPathManagerというクラスで集約管理されています。
このクラスはサイトのさまざまなディレクトリのパスを保持しており、フレームワークはここに設定されたパスを参照しているので、各ディレクトリの設定メソッドによって設定を変更してやることでサイトのディレクトリ構成を自由に変えることができます。
PathManagerクラスの詳細についてはPathManagerのリファレンスを参照してください。
以下に一つの例を示します。
index.php
//define('CURRY_PATH', realpath(dirname(__FILE__) . '/../../curry')); //define('SITE_PATH', realpath(dirname(__FILE__) . '/..')); define('CURRY_PATH', realpath(dirname(__FILE__) . '/../curry')); define('SITE_PATH', realpath(dirname(__FILE__))); ・ ・ ・ PathManager::setSystemRoot(SITE_PATH); PathManager::setControllerDirectory(SITE_PATH . '/controllers'); PathManager::setModelDirectory(SITE_PATH . '/models'); PathManager::setViewDirectory(SITE_PATH . '/views'); PathManager::setHtdocsDirectory(SITE_PATH); $dispatcher = new Dispatcher(); ・ ・ ・
この例では、標準ではappというディレクトリの下に置くコントローラー、モデル、ビューのディレクトリをサイトのルート直下に置くように設定しています。
そしてWebルートとして設定するべきhtodcs以下のディレクトリ、ファイルも全てのサイトルート直下に配置しています。
すなわち、以下のようなディレクトリ構成の場合の設定となります。
標準の構成と比較してみてください。
∟site
∟controllers
∟models
∟services
∟views
∟(cache)
∟(compile)
∟layouts
∟templates
∟configs
∟css
∟images
∟js
∟.htaccess
∟index.php
∟logs
∟library
このようなディレクトリ構成の場合、サイトを構成する全てのファイルはWebルート配下に存在することになり、セキュリティ上は好ましくはありませんが、レンタルサーバー等でWebルートを設定できない場合にはこのようにする必要があるかもしれません。