yii使用view实例向视图传参
1.先在控制器中保存参数
public function actionAbout() { $view = Yii::$app->getView();//此处的view实例与视图中的view(默认的$this变量)为同一个。所以此处保存的参数在视图中也可以用 $view->params["testView"] = "testView"; //因为是同一个布局变量,所以在视图中也可以使用 //$this->renderAjax("about",["test"=>7]); //$this->renderFile("appviewssiteabout.php",["test"=>8]); return $this->render("/site/about.php",["test"=>5]); }
2.在view中使用它
echo $this->params["testView"];
3.向视图传递数据总结:
视图中访问数据
在视图中有两种方式访问数据:推送和拉取。
推送方式是通过视图渲染方法的第二个参数传递数据, 数据格式应为名称-值的数组, 视图渲染时,调用PHP extract()
方法将该数组转换为视图可访问的变量。 例如,如下控制器的渲染视图代码推送2个变量到 report
视图:$foo
= 1
和 $bar = 2
。
echo $this->render("report", [ "foo" => 1, "bar" => 2, ]);
拉取方式可让视图从yiiaseView视图组件或其他对象中主动获得数据(如Yii::$app
), 在视图中使用如下表达式$this->context
可获取到控制器ID,
可让你在report
视图中获取控制器的任意属性或方法, 如以下代码获取控制器ID。
The controller ID is: <?= $this->context->id ?>
推送方式让视图更少依赖上下文对象,是视图获取数据优先使用方式, 缺点是需要手动构建数组,有些繁琐, 在不同地方渲染时容易出错。
视图间共享数据
yiiaseView视图组件提供yiiaseView::params参数 属性来让不同视图共享数据。
例如在about
视图中,可使用如下代码指定当前 breadcrumbs的当前部分。
$this->params["breadcrumbs"][] = "About Us";
在布局文件(也是一个视图)中,可使用依次加入到yiiaseView::params数组的值来 生成显示breadcrumbs:
<?= yiiwidgetsBreadcrumbs::widget([ "links" => isset($this->params["breadcrumbs"]) ? $this->params["breadcrumbs"] : [], ]) ?>
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。