2

我在我的 web 项目中使用 Yii 框架。现在,我有几个模块,我只想对所有模块使用一种布局。我使用以下代码来确定每个模块中每个控制器/动作的布局:

$this->layoutPath = Yii::getPathOfAlias('application.views.layouts');
$this->layout = '//layouts/myLayout';

是否有任何其他解决方案可以通过在每个模块的 init() 函数中使用相同的代码来做到这一点?换句话说,我必须在每个动作中编写上述两行代码,我认为这不好,我想减少我的代码行数。例如如下:

class StaffModule extends CWebModule
{
    public $layout;
    public $layoutPath;
    public function init()
    {
        $this->layoutPath = Yii::getPathOfAlias('application.views.layouts');
                $this->layout = '//layouts/myLayout';
        $this->setImport(array(
            'staff.models.*',
            'staff.components.*',
        ));
    }
}

但它不起作用。请帮帮我。

4

3 回答 3

2

Just use

$this->layout='//layouts/myLayout';

without

$this->layoutPath = Yii::getPathOfAlias('application.views.layouts');

because // mean you specific absolute path from root

于 2013-08-27T02:22:14.217 回答
0

我已经回答了类似的问题

对多个模块使用通用布局

解决方案是在模块中的 beforeControllerAction 上设置布局。它应该工作。

于 2013-07-26T15:11:19.563 回答
0

您在 init 函数中使用的方法是正确的方向..我认为问题可能是..正如您定义的那样,layoutPath您不应该有//layouts..

$this->layoutPath = Yii::getPathOfAlias('application.views.layouts');
$this->layout = 'myLayout';

你不需要这些:

public $layout;
public $layoutPath;
于 2012-10-14T15:39:54.707 回答