在Yii中,有没有办法使用与为控制器定义的layout
不同的{{1}}呈现单个操作?我有一个动作,我想格式化不同于其余的,并且从文档中不清楚是否可能。
答案 0 :(得分:50)
我相信你可以调用$layout
变量。
public function actionYourAction()
{
$this->layout = 'nameOfYourAltLayout';
}
以下链接中的说明表明您必须为每个操作设置此变量,因为您不能只设置默认的公共变量,并期望其他操作默认返回到此。
http://www.yiiframework.com/wiki/28/how-to-implement-multiple-page-layouts-in-an-application/
<强> ::编辑:: 强>
这里最好的做法是在视图脚本中为调用它的特定操作定义$layout
变量。例如,如果您的操作调用viewscriptone.php
,那么viewscriptone视图文件将包含:
$this->layout = 'nameOfYourAltLayout';
在此处覆盖而不是在控制器操作中更有意义。但是,正如LDG所说,如果布局是有条件的,你应该将它保存在控制器中。此信息仍可在页面“使用布局”部分的上方链接中找到。
答案 1 :(得分:5)
该wiki条目在描述如何使用布局方面做得非常好,绝对值得一读。我认为你可以在控制器类的开头设置一个默认布局,然后在特定的动作函数中覆盖它,而不必在每个动作中定义布局,至少它对我有用。您还可以在任何复杂情况下使用beforeAction功能。而且,正如您可能已经知道的那样,您可以使用renderPartial完全绕过布局。