Zend framework 我可以在Zend Framework中使用多个布局吗?

Zend framework 我可以在Zend Framework中使用多个布局吗?,zend-framework,layout,modular,zend-layout,Zend Framework,Layout,Modular,Zend Layout,我有一个华丽的页面,前端有图像旋转器供客户使用 对于后端,我希望有不同的布局。我可以有多个布局吗 一个小小的提示是值得注意的是的,您可以有多个布局,尽管根据请求切换布局并不那么简单 我已经做了很多次了,最终我开发了一个控制器操作助手和应用程序资源插件,您可以自由使用或从中获得灵感 我创建了一个布局插件,用于在调用非默认模块时切换布局: class MyApplication_Layout_Controller_Plugin_Layout extends Zend_Layout_Controll

我有一个华丽的页面,前端有图像旋转器供客户使用

对于后端,我希望有不同的布局。我可以有多个布局吗


一个小小的提示是值得注意的

是的,您可以有多个布局,尽管根据请求切换布局并不那么简单

我已经做了很多次了,最终我开发了一个控制器操作助手和应用程序资源插件,您可以自由使用或从中获得灵感


我创建了一个布局插件,用于在调用非默认模块时切换布局:

class MyApplication_Layout_Controller_Plugin_Layout extends Zend_Layout_Controller_Plugin_Layout
{

    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        switch ($request->getModuleName()) {
            case 'admin': $this->_moduleChange('admin');
        }
    }

    protected function _moduleChange($moduleName) {
        $this->getLayout()->setLayoutPath(
            dirname(dirname(
                $this->getLayout()->getLayoutPath()
            ))
            . DIRECTORY_SEPARATOR . 'layouts/scripts/' . $moduleName
        );
        $this->getLayout()->setLayout($moduleName);
    }

}
然后在我的引导程序中,我执行以下操作:

Zend_Layout::startMvc(
            array(
                'layoutPath' => self::$root . '/application/views/layouts/scripts',
                'layout' => 'layout',
                'pluginClass' => 'MyApplication_Layout_Controller_Plugin_Layout'
            )
        );
非默认布局位于以模块命名的文件夹中,因此我的目录结构如下所示:

/path/to/application/views/layouts/scripts/layout.phtml --> default layout

/path/to/application/views/layouts/scripts/admin/admin.phtml --> admin layout
试一试


它将在模块的视图/脚本文件夹中将布局切换到layoutName.phtml;)

这是错误的。该行:

class MyApplication_Layout_Controller_Plugin_Layout extends end_Layout_Controller_Plugin_Layout

应该是
extends Zend\u Controller\u Plugin\u Abstract
。否则,您将得到一个关于
MVCSuccesfulActionOnly

的错误,这根本不起作用。应该是$this->\u helper->layout->setLayout('layoutname')
class MyApplication_Layout_Controller_Plugin_Layout extends end_Layout_Controller_Plugin_Layout