【发布时间】:2016-07-26 22:24:05
【问题描述】:
我想让布局反映模型中的一些数据。但是,CController 类中的 render 方法仅将结构化数据传递给视图文件,而布局文件仅获取已渲染的视图。
那么,如何最好地让模型中的布局显示数据?
想到两种可能性:
使 Yii 的布局文件成为无操作,从视图中手动模仿布局逻辑。
在其子类中重写 CController 的 render 方法。
我对这两种变体都不满意,所以也许有人对如何做到这一点有更清晰的想法?
【问题讨论】:
我想让布局反映模型中的一些数据。但是,CController 类中的 render 方法仅将结构化数据传递给视图文件,而布局文件仅获取已渲染的视图。
那么,如何最好地让模型中的布局显示数据?
想到两种可能性:
使 Yii 的布局文件成为无操作,从视图中手动模仿布局逻辑。
在其子类中重写 CController 的 render 方法。
我对这两种变体都不满意,所以也许有人对如何做到这一点有更清晰的想法?
【问题讨论】:
另一种方法是在控制器类中定义一个公共变量,例如:
class MyController extends Controller {
public $test = 'foo';
....
然后可以在布局中访问该值:
echo $this->test;
并在一个动作中被操纵:
public function actionMyaction(){
$this->test = "bar";
...
如果您需要在布局中使用许多变量,显然这并不理想。一种解决方案是使用一组参数。或者,您可以考虑使您的布局更简洁,并使用CWidget 创建可重用的组件以在您的视图中使用。
例如,您显然不希望在每个视图中都复制主导航的代码,因此显而易见的解决方案是在布局中添加,但如果处理数据变得不方便,您可以拥有一个实例在每个视图中呈现导航的小部件(您可以将数据传递给CWidget 类),例如:
$this->widget("MainNavigation",array("params"=>$params));
【讨论】: