Yii2 ListView 和数据提供者
Posted
技术标签:
【中文标题】Yii2 ListView 和数据提供者【英文标题】:Yii2 ListView and dataprovider 【发布时间】:2014-10-15 12:03:03 【问题描述】:哪些数据必须发送给数据提供者?
在我的控制器中:
public function actionIndex()
$searchModel = new UserSearch();
$dataProvider = $searchModel->search( Yii::$app->request->queryParams );
//other stuff and sending array of params to view
在视图中:
echo ListView::widget( [
'dataProvider' => $dataProvider,
] );
但我只有 id`s:
如果我设置单一视图,例如:
'itemView' => '_single',
如何将数据发送到_single.php?
我的意思是 - 需要在 GridView 中查看列表项的默认模板:
GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'id',
'username',
'email:email',
'password',
'role',
//....
然后我得到了完美的网格:
【问题讨论】:
【参考方案1】:控制器 - SiteController.php
<?php
// Yii2 Listview Example : by Songwut Kanchanakosai, Thailand.
use common\models\Members;
use common\models\SearchMembers;
...
public function actionIndex()
$searchModel = new SearchMembers();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
?>
查看(一)-index.php
<?php
use yii\widgets\ListView;
...
echo ListView::widget( [
'dataProvider' => $dataProvider,
'itemView' => '_item',
] ); ?>
查看(2)-_item.php
<?php
use yii\helpers\html;
?>
<?=$model->name;?>
<?=$model->age;?>
<?=$model->mobile;?>
示例结果:
Songwut 36 +668-3949-5153
Prawee 41 +668-7323-2334
Kosol 32 +668-8014-0165
Utehn 39 +668-7874-5643
【讨论】:
【参考方案2】:how send data to _single.php ?
这是如何使用$viewParams
$viewParams 公共属性数组 $viewParams = []
$itemView 被传递的附加参数 呈现。仅当 $itemView 为字符串时才使用此属性 表示视图名称。
echo ListView::widget( [
'dataProvider' => $dataProvider,
'viewParams'=>['name'=>'My Name is Stefano'], //acccessed in view as $name with value 'My Name is Stefano'
] );
【讨论】:
【参考方案3】:在官方文档中http://www.yiiframework.com/doc-2.0/yii-widgets-listview.html#$itemView-detail
$itemView 公共属性
用于渲染每个数据项的视图名称,或用于渲染的回调(例如匿名函数) 每个数据项。如果它指定一个视图名称,以下变量 将在视图中可用:
$model:混合,数据模型
$key:混合,与数据项关联的键值
$index:整数,$dataProvider返回的items数组中数据项的从零开始的索引。
$widget: ListView,这个小部件实例
所以你的用户模型数据应该在 _single.php 中作为 $model->username
可用【讨论】:
好的,为获取列表项设置任何默认模板吗?没有自格式化?我的意思是 - 我将 ['model'=>$model,] 发送到 _single.php 然后我必须像 foreach 方法一样格式化它? 是的,单项的 _single.php 内容模板【参考方案4】:所以我想可以在 _single.php 中使用详细视图:
DetailView::widget([
'model' => $model,
'attributes' => [
'id',
'username',
'email:email',
//....
【讨论】:
以上是关于Yii2 ListView 和数据提供者的主要内容,如果未能解决你的问题,请参考以下文章