YII2中ActiveDataProvider可以使用yii\db\Query或yii\db\ActiveQuery的对象,方便我们构造复杂的查询筛选语句。

配合强大的GridView,快速的显示我们想要的数据。

通过上面的两个工具,我们快速的显示用户表信息。用户表结构如下:

我们创建一个用户模型MyUser.php,代码如下:

<?phpnamespace 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,代码如下:

<?phpnamespace 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>

显示结果如下:

转载于:https://www.cnblogs.com/jkko123/p/8732549.html

YII2中ActiveDataProvider与GridView的配合使用相关推荐

  1. Yii2中场景(scenario)和验证规则(rule) Yii2中的场景(scenario)和验证规则(rule)详解

    场景,顾名思义,就是一个情景,一种场面.在yii2中也有场景,这个场景跟你所理解的场景含义差不多. 和用户有交互的系统必不可少的功能包括收集用户数据.校验和处理.实际业务中,往往还需要将数据进行持久化 ...

  2. YII2中分页组件的使用

    当数据过多,无法一页显示时,我们经常会用到分页组件,YII2中已经帮我们封装好了分页组件. 首先我们创建操作数据表的AR模型: <?phpnamespace app\models;use yii ...

  3. 解决在Yii2中使用PHPExcel出现Class ‘app\controllers\PHPExcel‘ not found的问题

    解决在Yii2中使用PHPExcel出现Class 'app\controllers\PHPExcel' not found的问题 参考文章: (1)解决在Yii2中使用PHPExcel出现Class ...

  4. 在yii2中,让你action参数支持POST数据的小方法

    2019独角兽企业重金招聘Python工程师标准>>> 我们先来看一段代码 class RaController extends Controller {public $enable ...

  5. Yii2中如何将Jquery放在head中的方法

    2019独角兽企业重金招聘Python工程师标准>>> 今天在写一个扩展,扩展中要求,扩展中可以任意地方输出jquery代码,那么jquery就必须在head中首先加载. 大家都知道 ...

  6. yii2 引入php文件,Yii2中YiiBase自动加载类、引用文件方法分析(autoload)

    本文实例分析了Yii2中YiiBase自动加载类.引用文件的方法.分享给大家供大家参考,具体如下: 在Yii2中这个函数是用来加载类的,没有直接引用文件的相关实现.但是这个也可以用来引用文件. pub ...

  7. Yii2 中cookie的用法(2)

    设置Cookie PHPsetcookie("name", "Larry", time()+3600); Yii2$cookies = Yii::$app-&g ...

  8. Android在ListView中嵌套一个GridView时只显示一行的原因及解决方法

    在之前的编程里,我还没有遇到过要在一个ListView中嵌套一个GridView或是在一个GridView中嵌套一个ListView.所以今天事儿来了!我花了一将近3个小时,找到了为什么我在一个Lis ...

  9. js生成的cookie在yii2中获取不到的解决办法

    在js中创建的cookie,默认用yii2中自带的方法Yii::$app->request->cookies->get('abc')获取不到,而用$_COOKIE['abc']又是能 ...

  10. ASP.NET 2.0 中动态添加 GridView 模板列

      ASP.NET 2.0 中动态添加 GridView 模板列的例子 动态添加列,关键是实现 ITemplate.InstantiateIn 方法.下面是一个添加 GridView 模板列的例子. ...

最新文章

  1. HDU 3507:Print Article
  2. spark mongo java_Spark Mongodb集成 - Python版
  3. docker swarm的应用----docker集群的构建
  4. Linux 字符设备驱动开发基础(二)—— 编写简单 PWM 设备驱动
  5. 交通灯程序设计C语言,基于MCS-51的交通灯程序设计(c语言控制直行左转,包含程序)...
  6. 报告一下近期读书情况
  7. 觉得WaitGroup不好用?试试ErrorGroup吧!
  8. 【英语学习】【Daily English】U14 Transportation L02 I'm afraid that you're going in the wrong direction.
  9. 北上广深的请注意,阿里聚安全来找你玩啦~
  10. 【2021牛客暑期多校训练营4】Average (二分答案,区间/子数组最大平均值,)
  11. HTTP 传输内容的压缩
  12. 2008 r2 server sql 中文版补丁_sql2008 sp3补丁下载-sql server 2008补丁包sp3中文版补丁【32/64位】-东坡下载...
  13. 从嵌入式系统到无线模组 周立功单片机欲站在物联网的风口
  14. 我是如何将LINE表情包转化为微信表情包的?/How I convert Line stickers into Wechat stickers just as the way they are?
  15. 未知USB设备 端口重置失败
  16. Unity5 Standard自发光材质无效解决方法
  17. 正确写出doublecheck的单例模式
  18. Jquery给HTML元素绑定按键事件-回车事件
  19. 白盒测试:语句覆盖、条件覆盖、判定覆盖、条件-判定覆盖、组合覆盖、路径覆盖...
  20. HDU 6082 度度熊与邪恶大魔王 (完全背包)

热门文章

  1. SaaS软件的应用弱化了不同规模企业的竞争差距
  2. 八、IO优化(7)减少IO竞争
  3. 从问题到解决方案到应用-android-ApiDemo入口源代码学习及应用
  4. 问题记录:图片加载快速滑动闪动问题(Android-APP)
  5. Android 网络学习之使用多线程下载,支持断点续传
  6. (三)洞悉linux下的Netfilteriptables:内核中的rule,match和target
  7. 使用扩展欧几里得算法对逆元求解
  8. 1005 Spell It Right (20)(20 分)
  9. A - 饭卡(动态规划 01背包)
  10. JUnit for Android入门2 JUnit断言