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 魔术函数使用说明
May 14 PHP
谈谈关于php的优点与缺点
Apr 11 PHP
dhtmlxTree目录树增加右键菜单以及拖拽排序的实现方法
Apr 26 PHP
PHP中大于2038年时间戳的问题处理方案
Mar 03 PHP
PHP贪婪算法解决0-1背包问题实例分析
Mar 23 PHP
PHP的Yii框架中Model模型的学习教程
Mar 29 PHP
使用Codeigniter重写insert的方法(推荐)
Mar 23 PHP
关于PHP转换超过2038年日期出错的问题解决
Jun 28 PHP
PHP实现的策略模式简单示例
Aug 25 PHP
thinkPHP5框架auth权限控制类与用法示例
Jun 12 PHP
PHP删除字符串中非字母数字字符方法总结
Jan 20 PHP
PHP实现15位身份证号转18位的方法分析
Oct 16 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
理解PHP5中static和const关键字的区别
2007/03/19 PHP
smarty简单入门实例
2014/11/28 PHP
php简单判断两个字符串是否相等的方法
2015/07/13 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
2015/12/22 PHP
php魔术方法功能与用法实例分析
2016/10/19 PHP
JavaScript 组件之旅(二)编码实现和算法
2009/10/28 Javascript
JS Replace()的高级使用方法介绍
2013/06/29 Javascript
jquery动态改变onclick属性导致失效的问题解决方法
2013/12/04 Javascript
Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
纯CSS3代码实现滑动开关效果
2015/08/19 Javascript
jQuery实现简单的文件上传进度条效果
2020/03/26 Javascript
Jquery插件easyUi实现表单验证示例
2015/12/15 Javascript
jQuery短信验证倒计时功能实现方法详解
2016/05/25 Javascript
jQuery新窗口打开外链接
2016/07/21 Javascript
AngularJS基础 ng-repeat 指令简单示例
2016/08/03 Javascript
webpack HappyPack实战详解
2019/10/08 Javascript
[56:38]DOTA2-DPC中国联赛正赛Aster vs Magma BO3 第一场 3月5日
2021/03/11 DOTA
Python常见内置高效率函数用法示例
2018/07/31 Python
详解Python3中的迭代器和生成器及其区别
2018/10/09 Python
Python实现生成密码字典的方法示例
2019/09/02 Python
python递归调用中的坑:打印有值, 返回却None
2020/03/16 Python
python实现扫雷小游戏
2020/04/24 Python
Python字典dict常用方法函数实例
2020/11/09 Python
详解Scrapy Redis入门实战
2020/11/18 Python
TensorFlow的环境配置与安装方法
2021/02/20 Python
HTML5实现表单自动验证功能实例代码
2017/01/11 HTML / CSS
canvas进阶之如何画出平滑的曲线
2018/10/15 HTML / CSS
HTML利用九宫格原理进行网页布局
2020/03/13 HTML / CSS
Java中的异常处理机制的简单原理和应用
2013/04/27 面试题
公司财务工作总结的自我评价
2013/11/23 职场文书
大学生旅游业创业计划书
2014/01/29 职场文书
学生党员的自我评价范文
2014/03/01 职场文书
年终奖发放方案
2014/06/02 职场文书
我为党旗添光彩演讲稿
2014/09/10 职场文书
四风剖析查摆对照检查材料思想汇报
2014/09/24 职场文书
党员读书活动心得体会
2016/01/14 职场文书