Yii:使用与控制器布局不同的布局渲染动作

Mat*_*pel 22 php model-view-controller yii

在Yii中,有没有办法使用layout与控制器定义的不同的动作来渲染单个动作?我有一个动作,我想格式化不同于其余的,并且从文档中不清楚是否可能.

k t*_*e z 50

我相信你可以调用$layout变量.

public function actionYourAction()
{
    $this->layout = 'nameOfYourAltLayout';
}
Run Code Online (Sandbox Code Playgroud)

下面链接中的说明表明您必须为每个操作设置此变量,因为您不能只设置默认公共变量并期望其他操作默认返回到此.

http://www.yiiframework.com/wiki/28/how-to-implement-multiple-page-layouts-in-an-application/

::编辑::

这里的最佳做法似乎是$layout在视图脚本中为调用它的特定操作定义变量.例如,如果您的操作调用,viewscriptone.php那么viewscriptone视图文件将包含:

$this->layout = 'nameOfYourAltLayout';
Run Code Online (Sandbox Code Playgroud)

在这里覆盖而不是在控制器动作中更有意义.但是,正如LDG所说,如果布局是有条件的,你应该将它保存在控制器中.此信息仍可在页面"使用布局"部分下方的链接中找到.


ldg*_*ldg 5

该wiki条目在描述如何使用布局方面做得非常好,绝对值得一读.我认为你可以在控制器类的开头设置一个默认布局,然后在特定的动作函数中覆盖它,而不必在每个动作中定义布局,至少它对我有用.您还可以在任何复杂情况下使用beforeAction函数.而且,正如您可能已经知道的那样,您可以使用renderPartial完全绕过布局.