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 和数据提供者的主要内容,如果未能解决你的问题,请参考以下文章

Yii2 数据提供者默认排序

yii2 数据提供者查询需要很长时间

yii2 数据提供者 dataProvider

Yii2 ListView 自定义数据属性基于当前 DP 模型

Yii2 数据提供者如何返回过去 24 小时的结果

yii2模板