我目前正在为每个模块加载不同的布局文件。
我已将以下内容添加到我的 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');
}
}
一切正常,但我更愿意将此插件与其他插件一起注册到引导文件中。当我将此插件移动到 Bootstrap 文件并像这样注册它时:
protected function _initLayouts() {
$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new Layout_Plugin_ModuleLayout());
}
我收到以下错误:
致命错误:在第 31 行调用 C:\workarea\web_projects\gam\trunk\website\library\Layout\Plugin\ModuleLayout.php 中非对象的成员函数 setLayoutPath()
显然,我做错了什么或者误解了这个插件是如何工作的。
编辑:最终在http://dustint.com/post/28/per-module-zend_layout使用了解决方案的修改版本。但是,我愿意接受有关此的建议。这个解决方案使用普通的控制器插件,而我怀疑我应该让我们使用布局插件类型。然而,它奏效了。