区别
DetailView 小部件能够用于显示一条记录数据
ListView 和 GridView 小部件能够用于显示一个拥有分页、 排序和过滤功能的一个列表或者表格
格式化
默认格式化时间
更多的格式化
自定义格式化
匿名函数格式化
图片展示
[
'attribute' => 'image',
'format' => ['image',['width'=>'100','height'=>'100']],
'value' => function ($data) {
return $data->image;
}
],
链接
[
'attribute' => 'title',
'value' => function ($model, $key, $index, $column) {
return Html::a($model->title,
['article/view', 'id' => $key]);
},
'format' => 'raw',
],
数据枚举
[
'attribute' => 'sex',
'value'=>function ($model,$key,$index,$column){
return $model->sex==1?'男':'女';
},
//在搜索条件(过滤条件)中使用下拉框来搜索
'filter' => ['1'=>'男','0'=>'女'],
//or
'filter' => Html::activeDropDownList($searchModel,
'sex',['1'=>'男','0'=>'女'],
['prompt'=>'全部']
)
],
[
'label'=>'产品状态',
'attribute' => 'pro_name',
'value' => function ($model) {
$state = [
'0' => '未发货',
'1' => '已发货',
'9' => '退货,已处理',
];
return $state[$model->pro_name];
},
'headerOptions' => ['width' => '120']
]
代码展示
主要有一个数据提供者 一个过滤数据 一个表格部分(列数据/动作列)
GridView::widget([
// 你传过来的ActiveDataProvider
'dataProvider' => $dataProvider,
//过滤
'filterModel' => $searchModel,
//以下就是表格部分了
'columns' => [
// 第一列:排序
['class' => 'yii\grid\SerialColumn'],
// 第二列:sid,与你查询的model字段相对应,可以少,不可以多
'sid',
//第三列:姓名sname
[
'attribute' => 'sname',
// 自定义列名
'label'=>'姓名',
],
// 更复杂的列数据
[
'class' => 'yii\grid\DataColumn', //由于是默认类型样式,可以省略
//采用匿名函数方式
'value' => function ($data) {
return $data->name;
// 如果是数组数据则为 $data['name'] ,例如,使用 SqlDataProvider 的情形。
},
],
// 动作列,默认三个动作,分别为{view},{update},{delete}
[
'class' => 'yii\grid\ActionColumn',
// 列名
'header' => '操作',
// 定义这一列里面有几个操作,这里为查看,更新,删除
'template' => '{stuent-view} {studnet-update} {student-delete}',
// 为你template中声明的操作声明动作
'buttons' => [
// 对应{student-view},三个参数,最主要的$key,为你model主键的id
'stuent-view' => function ($url, $models, $key) {
// 为下面a链接的url,此处指向StudentController的actionView方法
$url = ['student/view', 'id'=>$key];
$options = [
'title' => '查看',
'aria-label' => '查看',
'data-pjax' => '0',
];
return Html::a('<span class="glyphicon glyphicon-eye-open"></span>', $url, $options);
}
]
],
],
]);
DetailView
定义
DetailView小部件通常用来显示的是一条记录的详情。
- 一个Model模型类对象。
- 一个AR类的实例对象。
- 由键值对构成的一个关联数组。
一个典型的DetailView的使用方法如下:
<?= DetailView::widget([
'model' => $model,
'attributes' => [
'id',
'content:ntext',
[
'attribute'=>'status'
'value'=>$model->status0->name
]
'create_time:datetime',
'update_time:datetime',
],
]) ?>
属性
代码
options格式:
'options' => ['class' => 'table table-striped table-bordered detail-view']
template格式:
'template' => '<tr><th{captionOptions}>{label}</th><td{contentOptions}>{value}</td></tr>'