我试图理解Yii如何将页面之间的数据传递给我。令我感到困惑的一件事是,与各自控制器关联的视图页面可以访问通过渲染发送给它的数据而无需发布或获取请求。即
//in the controller php file
$this->render('view',array('data1'=>$data1)))
//in the view php file
if (isset($data1)) { //do something amazing }
现在我意识到这是因为视图可以访问控制器的成员。但是,如果是这样的话,为什么还有人会在渲染函数中放置一个数据数组?
考虑在SO here上提供的另一个示例。
我误解了什么?
答案 0 :(得分:2)
数据数组参数的要点是能够将变量传递给控制器的非属性的视图文件。如果您的控制器代码是,那么:
/* controller */
$this->property = 'Controller Property';
$variable = 'Method-scoped variable';
$this->render( 'view' ); // no second parameter
然后$variable
不在您的视图代码中可用
/* view */
echo $this->property; // "Controller Property"
echo $variable; // null;
通过将数组传递给render方法,您可以将数组成员提取到视图脚本中可用的变量中:
/* controller */
//...
$this->render( 'view', array( 'myvar' => $variable ) );
/* view */
echo $myvar; // "Method-scoped variable"
除非您的视图仅在渲染中使用控制器属性,否则您将需要使用第二个参数传递范围信息,以便视图脚本可以使用它。