【问题标题】:How to set up layout for all controllers in Yii module?如何为 Yii 模块中的所有控制器设置布局?
【发布时间】:2013-08-02 10:46:46
【问题描述】:

在我的 Yii 应用程序中,我有一个名为 admin 的模块,因此模块类是 AdminModule,它扩展了 CWebModule 类并位于 AdminModule.php 文件中。根据文档,CWebModule 有一个 layout 属性,该属性在所有模块控制器之间共享,以防控制器本身没有定义任何布局。

我的控制器没有定义任何布局,在 AdminModule.php 中我放了这个:

$this->layout='webroot.themes.bootstrap.views.layouts.column2';
$this->layoutPath = Yii::getPathOfAlias('webroot.themes.bootstrap.views.layouts');

但是,我在管理模块中的控制器仍在使用其他一些布局,我认为它是在组件目录中的 Controller.php 中定义的。这是为什么?如何为特定模块设置共享布局?

【问题讨论】:

    标签: yii yii-modules


    【解决方案1】:

    解决方案是稍微更改我的代码,如下所示:

    $this->layoutPath = Yii::getPathOfAlias('webroot.themes.bootstrap.views.layouts');
    $this->layout = 'column2';
    

    与指定的路径一样,我不需要为布局指定整个路径别名。我在我的 AdminModule.php 的 init() 函数中有这些行,它工作正常。

    【讨论】:

      【解决方案2】:

      尝试如下图设置布局路径

      $this->layout="webroot/themes/bootstrap/views/layouts/column2";
      

      【讨论】:

        【解决方案3】:

        解决方案是在模块中的 beforeControllerAction 上设置布局。它应该工作。 我已经回答了类似的问题,请参考 Yii module layout

        【讨论】:

        • 感谢您的回复。看我的回答 - 在 init() 中是可行的,我刚刚把代码做错了。此外,我认为将这些东西放入beforeControllerAction() 在语义上是不正确的。我不确定,但我会使用此函数来指定必须在触发控制器之前执行的动作,而不是进行一些配置更改。
        • 因为我经历了一些票,有些人询问设置布局在 init 上不起作用。如果它对您有用,那就太好了,因为它解决了您的问题。
        【解决方案4】:

        如果你同时使用Module和Theme(如bootstrap),意味着Yii会首先在Theme文件夹中找到视图文件(包括布局文件,一个特殊的视图文件),CController中有一个重要的函数resolveViewFile,您可以在此添加调试点以观察其工作原理,以下是我的解决方案:

        1。我有一个名为“admin”的模块。

        2。在 AdminModule 的 init 函数中,添加:

        $this->layout = 'column2'; 

        3。删除模块的所有视图文件到主题文件夹

        【讨论】:

          【解决方案5】:

          您可以将以下代码放入您的控制器中。

          public function init()
          {
              Yii::$app->setLayoutPath($this->module->getBasePath().'/views/layout');
          }
          

          或者您可以将以下代码放入您的模块引导类中

          public function init()
          {
              parent::init();
          
              Yii::$app->setLayoutPath($this->getBasePath().'/views/layout');
          }
          

          【讨论】:

            猜你喜欢
            • 2015-10-29
            • 2013-05-16
            • 1970-01-01
            • 2013-07-26
            • 2012-04-29
            • 1970-01-01
            • 2013-05-19
            • 1970-01-01
            • 2014-03-17
            相关资源
            最近更新 更多