【问题标题】:Change Layout in Bootstrap在 Bootstrap 中更改布局
【发布时间】:2011-04-26 15:22:29
【问题描述】:

我是 zend 新手,在引导程序中更改布局时遇到问题。我想在用户登录时更改布局。

我在引导程序中更改布局的功能是这样的:

protected function _initAuthState()
{
$layout = new Zend_Layout;
$layout->setLayoutPath('/layouts/scripts');

if (Zend_Auth::getInstance()->hasIdentity()):
// Logged in.
$layout->setLayout(layout2);

else:
// Not Logged in.
$layout->setLayout(‘layout’);
endif;
}

这段代码不行,布局总是一样的……求助!

【问题讨论】:

    标签: zend-framework layout bootstrapping


    【解决方案1】:

    您正在修改 new 布局实例,而不是系统正在使用的实例。

    我假设您在 application.ini 中指定您的布局参数。所以你需要:

    $this->bootstrap('layout');
    $layout = $this->getResource('layout');
    

    然后对这个布局实例执行检查/修改。

    顺便说一句,更改布局通常使用前端控制器插件完成。仍然足够早地运行以完成这项工作,但通常更具可配置性和可重用性。两个例子见herehere

    【讨论】:

    • 感谢您的回答。我创建了插件,但是当我打电话给他时它给了我一个错误:致命错误:第 8 行的 /home/zerego/application/Bootstrap.php 中找不到类 'Plugin_Layout'
    • 这是一个与您如何调用/实例化插件有关的常见问题。通常,您需要为资源加载器设置 appnamespace 和前缀/文件夹映射。如果您发布用于实例化插件的代码和/或配置,我将评论所需的调整。我们快要到了。 ;-)
    【解决方案2】:

    我找到答案了!!

    这是我的最终结果,并且正在工作!

    Bootstrap.php:

    <?php
    
    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {
    
        public function _initLoader(){
            $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
            'basePath'  => '../application/',
            'namespace' => 'My',
            ));
    
            $resourceLoader->addResourceTypes(array(
                'plugin' => array(
                    'path'      => 'plugins/',
                    'namespace' => 'Plugin',
                )
            ));
        }
    
        public function _initPlugins()
        {
        $front = Zend_Controller_Front::getInstance();
        $front->registerPlugin(new My_Plugin_Layout());
        }
    }
    

    应用程序/插件/Layout.php:

    <?php
    class My_Plugin_Layout extends Zend_Controller_Plugin_Abstract
    {
        public function preDispatch()
        {
            $user = Zend_Auth::getInstance();
            $role = $user->getIdentity()->role;
            $layout = Zend_Layout::getMvcInstance();
    
            switch ($role) {
                case 'admin':
                    $layout->setLayout('layout2');
                    break;
    
                case 'normal':
                    $layout->setLayout('layout');
                    break;
    
                default:
                    $layout->setLayout('layout');
                    break;
            }
        }
    }
    ?>
    

    【讨论】:

      猜你喜欢
      • 2015-06-26
      • 1970-01-01
      • 2012-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      • 2019-01-08
      相关资源
      最近更新 更多