为什么要在控制器调用 render() 时包含一个数据数组呢?

Why bother including a data array with a call to render() from the controller?

我想了解 Yii 如何在页面之间传递数据。让我感到困惑的一件事是,与其各自控制器关联的视图页面可以访问通过渲染发送给它的数据,而无需 post 或获取请求。 IE。

//in the controller php file
$this->render('view',array('data1'=>$data1))) 

//in the view php file
if (isset($data1)) { //do something amazing }

现在我意识到这是因为视图可以访问控制器的成员。但是,如果是这样的话,为什么会有人费心将数据数组放入渲染函数中?

考虑 SO here 上提供的另一个示例。

我误会了什么?

数据数组参数的要点是能够将变量传递给视图文件,这些变量不是控制器的属性。如果您的控制器代码是这样的:

/* 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;

通过将数组传递给渲染方法,您可以让它将数组成员提取到视图脚本中可用的变量中:

/* controller */
//...

$this->render( 'view', array( 'myvar' => $variable ) );

/* view */

echo $myvar; // "Method-scoped variable"

除非您的视图仅在渲染中使用控制器属性,否则您将需要使用第二个参数来传递作用域信息,以便视图脚本可以使用它。