いま手がけているCakePHPの案件で、運営者用管理画面、サプライヤー用管理画面、閲覧用ページ分けたいという要件があって、各機能はそれぞれ別のURLをもたせます。
そのため、各機能はCakePHPのアプリケーションで別にして、利用するデータベースは一緒なのでモデルは共通にしたいというケースのメモです。
パスで表すとこんな感じです。
/cgi /lib /plugins /Model ← 各アプリケーションのモデルはここから読み込む /html ↓各アプリケーション /manager /supplier /front
App::buildでモデルのパスを定義する
App::buildでパッケージの探査パスを追加することができるので、各アプリケーションのbootstrap.phpにモデルのパスを定義します。
/ Modelディレクトリを定義 App::build(array('Model' => array(dirname(dirname(CAKE)).DS.'Model'.DS)),App::RESET); // Model/Behaviorディレクトリを定義 App::build(array('Model/Behavior' => array(dirname(dirname(CAKE)).DS.'Model'.DS.'Behavior'.DS)),App::RESET);
今回のディレクトリ構造では、CAKE定数をベースに設定しているので、/lib/Cakeの2つ上のディレクトリの/Modelを指す必要がるので、Cake定数をdirnameで2度ラップして/Model/を指定しています。*1
デフォルトの探査パスは必要がなくなるので、第2引数でApp::RESETでその他の探査パスを無効にしています。
App::buildでは、ControllerやViewの他、オリジナルのパッケージを定義することもできます。
- この辺は環境に合わせて設定する必要がありますね [↩]