[CakePHP]アプリケーションをまたいで共通のModelを利用する方法

いま手がけている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の他、オリジナルのパッケージを定義することもできます。

  1. この辺は環境に合わせて設定する必要がありますね []
スポンサーリンク
336x280_1
336x280_1

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
336x280_1