YII 传递参数到模版

1.先在控制器中保存参数

[php]  view plain  copy
  1. public function actionAbout()  
  2.     {  
  3.         $view = Yii::$app->getView();//此处的view实例与视图中的view(默认的$this变量)为同一个。所以此处保存的参数在视图中也可以用  
  4.         $view->params['testView'] = 'testView'//因为是同一个布局变量,所以在视图中也可以使用  
  5.         //$this->renderAjax('about',['test'=>7]);  
  6.         //$this->renderFile('app\views\site\about.php',['test'=>8]);  
  7.         return $this->render('/site/about.php',['test'=>5]);  
  8.     }  

2.在view中使用它

[php]  view plain  copy
  1. echo $this->params['testView'];  

3.向视图传递数据总结:

视图中访问数据

在视图中有两种方式访问数据:推送和拉取。

推送方式是通过视图渲染方法的第二个参数传递数据, 数据格式应为名称-值的数组, 视图渲染时,调用PHP extract() 方法将该数组转换为视图可访问的变量。 例如,如下控制器的渲染视图代码推送2个变量到 report 视图:$foo = 1 和 $bar = 2

[php]  view plain  copy
  1. echo $this->render('report', [  
  2.     'foo' => 1,  
  3.     'bar' => 2,  
  4. ]);  

拉取方式可让视图从yii\base\View视图组件或其他对象中主动获得数据(如Yii::$app), 在视图中使用如下表达式$this->context可获取到控制器ID, 可让你在report视图中获取控制器的任意属性或方法, 如以下代码获取控制器ID。

[php]  view plain  copy
  1. The controller ID is: <?= $this->context->id ?>  

推送方式让视图更少依赖上下文对象,是视图获取数据优先使用方式, 缺点是需要手动构建数组,有些繁琐, 在不同地方渲染时容易出错。

视图间共享数据

yii\base\View视图组件提供yii\base\View::params参数 属性来让不同视图共享数据。

例如在about视图中,可使用如下代码指定当前 breadcrumbs的当前部分。

[php]  view plain  copy
  1. $this->params['breadcrumbs'][] = 'About Us';  

布局文件(也是一个视图)中,可使用依次加入到yii\base\View::params数组的值来 生成显示breadcrumbs:

[php]  view plain  copy
  1. <?= yii\widgets\Breadcrumbs::widget([  
  2.     'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],  
  3. ]) ?>  

猜你喜欢

转载自blog.csdn.net/u013697959/article/details/80045274
yii