私がしていることは、モジュール階層の外側の「ライブラリ」ディレクトリに共通クラスを保持することです。次にINCLUDE_PATH
、それぞれのモジュールの「models」ディレクトリと共通の「library」ディレクトリを使用するように my を設定します。
docroot/
index.php
application/
library/ <-- common classes go here
default/
controllers/
models/
views/
members/
controllers/
models/
views/
admin/
controllers/
models/
views/
. . .
私のブートストラップ スクリプトでは、「application/library/
」をINCLUDE_PATH
. 次に、各コントローラーのinit()
関数で、そのモジュールの " models/
" ディレクトリをINCLUDE_PATH
.
edit:setControllerDirectory()
のように 機能setModuleDirectory()
し、それぞれのモデル ディレクトリを に追加しませんINCLUDE_PATH
。いずれにせよ、これは自分で行う必要があります。これを行う方法の一例を次に示します。
$app = APPLICATION_HOME; // you should define this in your bootstrap
$d = DIRECTORY_SEPARATOR;
$module = $this->_request->getModuleName(); // available after routing
set_include_path(
join(PATH_SEPARATOR,
array(
"$app{$d}library",
"$app{$d}$module{$d}models",
get_include_path()
)
)
);
ブートストラップでパスに" " を追加することはできlibrary
ますが、ブートストラップで正しいモジュールの " " ディレクトリを追加することはできませんmodels
。これは、モジュールがルーティングに依存しているためです。コントローラーのメソッドでこれを行う人もいればinit()
、ActionController の preDispatch フックのプラグインを作成してINCLUDE_PATH
.