【发布时间】:2011-09-10 03:11:58
【问题描述】:
在 Yii 中,有没有办法使用与控制器定义的 layout 不同的 layout 来呈现单个动作?我有一个动作,我想以与其他动作不同的格式进行格式化,如果可能的话,从文档中不清楚。
【问题讨论】:
标签: php model-view-controller yii
在 Yii 中,有没有办法使用与控制器定义的 layout 不同的 layout 来呈现单个动作?我有一个动作,我想以与其他动作不同的格式进行格式化,如果可能的话,从文档中不清楚。
【问题讨论】:
标签: php model-view-controller yii
我相信您可以直接调用 $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 所说,如果布局是有条件的,您可能应该将其保留在控制器中。仍然可以在页面“使用布局”部分下的上述链接中找到此信息。
【讨论】:
该 wiki 条目在描述如何使用布局方面做得非常好,绝对值得一读。我确实认为您可以在控制器类的开头设置布局默认值,然后在特定的操作函数中覆盖它,而不必在每个操作中定义布局,至少它对我有用。您还可以将beforeAction 函数用于任何复杂的情况。而且,您可能已经知道,您可以使用 renderPartial 完全绕过布局。
【讨论】: