YII2中ActiveDataProvider与GridView的配合使用
YII2中ActiveDataProvider可以使用yii\db\Query或yii\db\ActiveQuery的对象,方便我们构造复杂的查询筛选语句。
配合强大的GridView,快速的显示我们想要的数据。
通过上面的两个工具,我们快速的显示用户表信息。用户表结构如下:

我们创建一个用户模型MyUser.php,代码如下:
<?php namespace app\models; use yii\db\ActiveRecord;
use yii\data\ActiveDataProvider; class MyUser extends ActiveRecord
{ //返回要操作的表名
public static function tableName()
{
return '{{%user}}';
} //设置规则
//注意,如果没有给字段设置规则,GridView的筛选项是不会出现的
public function rules()
{
return [
[['id', 'name', 'sex', 'age'], 'trim'],
[['id', 'sex', 'age'], 'integer'],
['name', 'string'],
];
} //查询
public function search($params)
{
//首先我们先获取一个ActiveQuery
$query = self::find();
//然后创建一个ActiveDataProvider对象
$provider = new ActiveDataProvider([
//为ActiveDataProvider对象提供一个查询对象
'query' => $query,
//设置分页参数
'pagination' => [
//分页大小
'pageSize' => 3,
//设置地址栏当前页数参数名
'pageParam' => 'p',
//设置地址栏分页大小参数名
'pageSizeParam' => 'pageSize',
],
//设置排序
'sort' => [
//默认排序方式
'defaultOrder' => [
'id' => SORT_DESC,
],
//参与排序的字段
'attributes' => [
'id', 'name', 'sex', 'age'
],
],
]); //如果验证没通过,直接返回
if (!($this->load($params) && $this->validate())) {
return $provider;
} //增加过滤条件
$query->andFilterWhere(['id' => $this->id])
->andFilterWhere(['like', 'name', $this->name])
->andFilterWhere(['sex' => $this->sex])
->andFilterWhere(['age' => $this->age]); return $provider;
}
}
然后,创建控制器TestController.php,代码如下:
<?php namespace app\controllers; use YII;
use yii\web\Controller;
use app\models\MyUser; class TestController extends Controller
{
public function actionTest()
{ $user = new MyUser();
//调用模型search方法,把get参数传进去
$provider = $user->search(YII::$app->request->get()); return $this->render('test', [
'model' => $user,
'provider' => $provider,
]);
}
}
视图页面test.php,代码如下:
<?php
use yii\helpers\Url;
use yii\helpers\Html;
use yii\grid\GridView;
?> <div id="page-wrapper">
<div class="row">
<div class="col-lg-12">
<button class="btn btn-primary" id="showSelBtn">显示我选中的</button>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<?php echo GridView::widget([
//设置GridView的ID
'id' => 'myUserGridView',
//设置数据提供器
'dataProvider' => $provider,
//设置筛选模型
'filterModel' => $model,
'columns' => [
//复选框列
['class' => 'yii\grid\CheckboxColumn'],
//显示序号列
['class' => 'yii\grid\SerialColumn'],
[
//设置字段显示标题
'label' => 'ID',
//字段名
'attribute' => 'id',
//格式化
'format' => 'raw',
//设置单元格样式
'headerOptions' => [
'style' => 'width:120px;',
],
],
[
'label' => '姓名',
'attribute' => 'name',
'format' => 'raw',
],
[
'label' => '头像',
'attribute' => 'head_img',
'format' => 'raw',
//通过该返回值,我们可以任意控制列数据的显示
//$data指向的是当前行的数据结果集
'value' => function ($data) {
return '<img src="' . '/' . ltrim($data->head_img, '/') . '" width="60px">';
},
],
[
'label' => '性别',
//设置筛选选项
'filter' => [0 => '男', 1 => '女'],
'attribute' => 'sex',
'format' => 'raw',
'value' => function ($data) {
return ($data->sex == 0) ? '男' : '女';
}
],
[
'label' => '年龄',
'attribute' => 'age',
'format' => 'raw',
],
[
'header' => '操作',
'class' => 'yii\grid\ActionColumn',
//设置显示模板
'template' => '{upd} {del}',
//下面的按钮设置,与上面的模板设置相关联
'buttons' => [
'upd' => function ($url, $model, $key) {
return '<a href="' . Url::toRoute(['test/upd', 'id' => $key]) . '" class="btn btn-warning">修改</a>';
},
'del' => function ($url, $model, $key) {
return '<a href="' . Url::toRoute(['test/del', 'id' => $key]) . '" class="btn btn-danger">删除</a>';
},
],
],
],
]); ?>
</div>
</div>
</div> <?php echo Html::jsFile('@web/js/jquery-3.3.1.min.js'); ?>
<script type="text/javascript">
$("#showSelBtn").on("click", function () {
var keys = $("#myUserGridView").yiiGridView('getSelectedRows');
alert(keys);
});
</script>
显示结果如下:


YII2中ActiveDataProvider与GridView的配合使用的更多相关文章
- yii2中如何使用modal弹窗之基本使用
作者:白狼 出处:http://www.manks.top/yii2_modal_baseuse.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接, ...
- Yii2中多表关联查询(join、joinwith)
我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer (id customer_name) 订单表Order (id order_name ...
- PHP在yii2中封装SuperSlide 幻灯片编写自己的SuperSlideWidget的例子
因为近期给朋友公司做个门户网站,把荒置了6.7年的PHP又重新拾起,发现PHP这些年兴旺多了,很多新的东西看的不明不白,研究了几个框架ZendFramework.thinkphp.Symfony.yi ...
- [moka同学笔记]Yii2中多表关联查询(join、joinwith) (摘录)
表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer (id customer_name) 订单表Order (id order_name cu ...
- Yii2.0中文开发向导——Yii2中多表关联查询(join、joinwith)(转)
我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer (id customer_name) 订单表Order (id order_ ...
- Yii2.0中文开发向导——Yii2中多表关联查询(join、joinwith)
我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer (id customer_name) 订单表Order (id order_ ...
- yii2中的url美化
在yii2中,如果想实现类似于post/1,post/update/1之类的效果,官方文档已经有明确的说明 但是如果想把所有的controller都实现,这里采用yii1的方法 'rules' =&g ...
- js生成的cookie在yii2中获取不到的解决办法
在js中创建的cookie,默认用yii2中自带的方法Yii::$app->request->cookies->get('abc')获取不到,而用$_COOKIE['abc']又是能 ...
- 解决Yii2中刷新网页时验证码不刷新的问题
解决Yii2中刷新网页时验证码不刷新的问题 [ 2.0 版本 ] ljfrocky 2015-05-30 19:39:00 1304次浏览 5条评论 10110 在Yii2框架中,如果在表单中使用 ...
随机推荐
- U3D的结构体堆分配栈分配
ST ot;//分配在栈上 ST[] arrt = new ST[2];//分配在堆上,因为数组是引用
- linux 3.10 的中断收包笔记
来看下NAPI和非NAPI的区别: (1) 支持NAPI的网卡驱动必须提供轮询方法poll(). (2) 非NAPI的内核接口为netif_rx(),NAPI的内核接口为napi_schedule() ...
- VUE 计算属性 vs 侦听属性
计算属性 vs 侦听属性 Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属性.当你有一些数据需要随着其它数据变动而变动时,你很容易滥用 watch——特别是如果你之前使用过 ...
- RabbitMQ.Net 应用(2)
//生产者 using RabbitMQ.Client; using System; using System.Collections.Generic; using System.Linq; usin ...
- [ SHELL编程 ] shell编程中数值计算方法实例
SHELL编程中经常会涉及到数值计算,有时候对于这些计算命令使用场景容易忘记或者混淆,这里针对常用的命令做个总结.主要包括let.bc.expr.(())等. 1.let 使用格式:let 表达式,表 ...
- C#自制Web 服务器开发:用C#开发自己的Web服务器
当输入: GET / HTTP/1.1 Accept: text/html, application/xhtml+xml, */* Accept-Language: zh-CN User-Agent: ...
- 学JS的心路历程-正规表达式Regular Expression
今天我们来看正规表达式,在谈到为什么需要多学这个之前,先来看个示例. 假设需要判断输入字串是否含有“apple”: var text=“A apple a day keeps the doctor a ...
- js基础-直接量与变量
直接量 123 "abc" console.log("234") true false 变量 var x = 123 变量可先声明后赋值 var定义的都是局部变 ...
- .net 代理类(WebService代理类的详解 )
http://hi.baidu.com/654085966/item/53ee8c0f108ad78202ce1b1d -----------转自 客户端调用Web Service的方式我现在知道 ...
- 解决pip下载速度慢
国外的pip源下载速度过慢,可以换成国内的源,这里换成豆瓣的源. 新建一个文件vim ~/.pip/pip.conf 内容为 [global]timeout = 6000index-url= http ...