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