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

时间:2011-06-07 14:21:12

标签: php model-view-controller yii

在Yii中,有没有办法使用与为控制器定义的layout不同的{{1}}呈现单个操作?我有一个动作,我想格式化不同于其余的,并且从文档中不清楚是否可能。

2 个答案:

答案 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完全绕过布局。