YII2框架中ActiveDataProvider与GridView的配合使用操作示例


Posted in PHP onMarch 18, 2020

本文实例讲述了YII2框架中ActiveDataProvider与GridView的配合使用操作。分享给大家供大家参考,具体如下:

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

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

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

YII2框架中ActiveDataProvider与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]) . '" rel="external nofollow" class="btn btn-warning">修改</a>';
              },
              'del' => function ($url, $model, $key) {
                return '<a href="' . Url::toRoute(['test/del', 'id' => $key]) . '" rel="external nofollow" 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框架中ActiveDataProvider与GridView的配合使用操作示例

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
Php获取金书网的书名的实现代码
Jun 11 PHP
PHP常用特殊运算符号和函数总结(php新手入门必看)
Feb 02 PHP
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
Jun 02 PHP
PHP字符串比较函数strcmp()和strcasecmp()使用总结
Nov 19 PHP
Yii实现MySQL多数据库和读写分离实例分析
Dec 03 PHP
php实现检查文章是否被百度收录
Jan 27 PHP
摘自织梦CMS的HTTP文件下载类
Aug 08 PHP
PHP测试成功的邮件发送案例
Oct 26 PHP
PHP实现的方程求解示例分析
Nov 11 PHP
PHP大文件分片上传的实现方法
Oct 28 PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
Jan 10 PHP
php5.6.x到php7.0.x特性小结
Aug 17 PHP
YII2框架使用控制台命令的方法分析
Mar 18 #PHP
YII2框架中添加自定义模块的方法实例分析
Mar 18 #PHP
YII2框架中日志的配置与使用方法实例分析
Mar 18 #PHP
YII2框架中查询生成器Query()的使用方法示例
Mar 18 #PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
Mar 18 #PHP
Laravel框架下的Contracts契约详解
Mar 17 #PHP
使用Entrust扩展包在laravel 中实现RBAC的功能
Mar 16 #PHP
You might like
安健A254立体声随身听的分析与打磨
2021/03/02 无线电
缓存技术详谈―php
2006/12/14 PHP
PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
2012/06/17 PHP
PHP实现通过strace定位故障原因的方法
2018/04/29 PHP
laravel实现按时间日期进行分组统计方法示例
2019/03/23 PHP
js中的window.open返回object的错误的解决方法
2009/08/15 Javascript
一个报数游戏js版(约瑟夫环问题)
2010/08/05 Javascript
JS保留两位小数 四舍五入函数的小例子
2013/11/20 Javascript
使用js显示当前时间示例
2014/03/02 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
2016/10/30 Javascript
如何制作幻灯片(代码分享)
2017/01/06 Javascript
微信小程序 swiper制作tab切换实现附源码
2017/01/21 Javascript
基于vue 添加axios组件,解决post传参数为null的问题
2018/03/05 Javascript
浅谈vue项目打包优化策略
2018/09/29 Javascript
[01:17]Ti4 循环赛第一日回顾
2014/07/11 DOTA
Selenium定位元素操作示例
2018/08/10 Python
在python中pandas读文件,有中文字符的方法
2018/12/12 Python
python3爬虫获取html内容及各属性值的方法
2018/12/17 Python
python实时检测键盘输入函数的示例
2019/07/17 Python
PyCharm常用配置和常用插件(小结)
2021/02/06 Python
Aerosoles爱柔仕官网:美国舒软女鞋品牌
2017/07/17 全球购物
Gweniss格温妮丝女包官网:英国纯手工制造潮流包包品牌
2018/02/07 全球购物
印度在线购买电子产品网站:Croma
2020/01/02 全球购物
Linux Interview Questions For software testers
2012/06/02 面试题
汽车专业学生自我评价
2014/01/19 职场文书
幼儿园教研活动方案
2014/01/19 职场文书
中秋寄语大全
2014/04/11 职场文书
教研处工作方案
2014/05/26 职场文书
党的群众路线教育实践活动总结报告
2014/07/03 职场文书
英语自我介绍演讲稿
2014/09/01 职场文书
2014年小学生迎国庆65周年演讲稿
2014/09/27 职场文书
2014七年级班主任工作总结
2014/12/05 职场文书
教师岗位职责范本
2015/04/02 职场文书
信仰纪录片观后感
2015/06/08 职场文书
Oracle 临时表空间SQL语句的实现
2021/09/25 Oracle