Curry
PHP Framework

ディレクトリ構成

標準のディレクトリ構成

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ルートを設定できない場合にはこのようにする必要があるかもしれません。