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所说,如果布局是有条件的,你应该将它保存在控制器中.此信息仍可在页面"使用布局"部分下方的链接中找到.
该wiki条目在描述如何使用布局方面做得非常好,绝对值得一读.我认为你可以在控制器类的开头设置一个默认布局,然后在特定的动作函数中覆盖它,而不必在每个动作中定义布局,至少它对我有用.您还可以在任何复杂情况下使用beforeAction函数.而且,正如您可能已经知道的那样,您可以使用renderPartial完全绕过布局.