現在、モジュールごとに異なるレイアウトファイルを読み込んでいます。モジュール固有のレイアウトプラグインは、.iniリソースとして動作しますが、ブートストラップファイルに登録されていないと動作しません。
私は私のconfig.iniファイル
; Module Support
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
; Module-based Layout Support
resources.layout.pluginClass= "Layout_Plugin_ModuleLayout"
そして、次のコントローラプラグインに以下を追加しました:
class Layout_Plugin_ModuleLayout extends Zend_Layout_Controller_Plugin_Layout {
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$this->getLayout()->setLayoutPath(
Zend_Controller_Front::getInstance()
->getModuleDirectory($request->getModuleName()) . '/layouts'
);
$this->getLayout()->setLayout('layout');
}
}
すべてが正常に動作しますが、私は、ブートストラップで、このプラグインを登録することを好みますファイルと他のプラグイン私は、ブートストラップファイルにこのプラグインを移動し、このようにそれを登録するとき:
protected function _initLayouts() {
$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new Layout_Plugin_ModuleLayout());
}
私は、取得するには、次のエラー:
致命的なエラー:C内の非オブジェクトのメンバ関数setLayoutPath()の呼び出し:\ workarea \ web_projects \ gam \ trunk \ website \ library \ Layout \ Plugin \ ModuleLayout.php on line 31
明らかに、私は何か間違っているか、このプラグインのしくみを誤解しています。誰も助けることができます。
おかげ..
EDIT:結局http://dustint.com/post/28/per-module-zend_layoutで溶液の修正版を使用。しかし、私はこれについての提案には開いています。このソリューションは通常のコントローラプラグを使用していますが、私はレイアウトプラグインタイプにする必要があると考えています。しかし、それは働いた。
私はいつも標準のプラグインを使用していますが、これはかなり標準的なアプラックです。プラグイン 'Zend_Layout_Controller_Plugin_Layout'は主にフレームワークレベルのクラスで、ディスパッチサイクルに入り込み、コントローラ固有の表示内容をレイアウトスクリプトに挿入することができます。実際には、アプリ固有のプラグインの拡張ポイントとして意図されていません。 –