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中与数组相关的函数
Mar 22 PHP
php面向对象全攻略 (十四) php5接口技术
Sep 30 PHP
PHP为表单获取的URL 地址预设 http 字符串函数代码
May 26 PHP
JS中encodeURIComponent函数用php解码的代码
Mar 01 PHP
php检查字符串中是否包含7位GSM字符的方法
Mar 17 PHP
php获取指定范围内最接近数的方法
Jun 02 PHP
深入理解PHP JSON数组与对象
Jul 19 PHP
浅谈PHP中的面向对象OOP中的魔术方法
Jun 12 PHP
基于PHP的加载类操作以及其他两种魔术方法的应用实例
Aug 28 PHP
详解php协程知识点
Sep 21 PHP
Yii2.0建立公共方法简单示例
Jan 29 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
Oct 04 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
第四章 php数学运算
2011/12/30 PHP
PHP连接SQLSERVER 注意事项(附dll文件下载)
2012/06/28 PHP
php跨域cookie共享使用方法
2014/02/20 PHP
PHP、Python和Javascript的装饰器模式对比
2015/02/03 PHP
PHP中快速生成随机密码的几种方式
2017/04/17 PHP
ThinkPHP5框架实现简单的批量查询功能示例
2018/06/07 PHP
php xhprof使用实例详解
2019/04/15 PHP
在JavaScript中实现命名空间
2006/11/23 Javascript
jquery 最简单易用的表单验证插件
2010/02/27 Javascript
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
2010/05/21 Javascript
jquery 简单应用示例总结
2013/08/09 Javascript
JS与C#编码解码
2013/12/03 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
2016/11/30 Javascript
vue中v-for通过动态绑定class实现触发效果
2018/12/06 Javascript
详解Vue 项目中的几个实用组件(ts)
2019/10/29 Javascript
webpack5 联邦模块介绍详解
2020/07/08 Javascript
python类继承与子类实例初始化用法分析
2015/04/17 Python
PyTorch上搭建简单神经网络实现回归和分类的示例
2018/04/28 Python
python读写LMDB文件的方法
2018/07/02 Python
django主动抛出403异常的方法详解
2019/01/04 Python
浅谈Python中文件夹和python package包的区别
2020/06/01 Python
Moss Bros官网:英国排名第一的西装店
2020/02/26 全球购物
德国玩具商店:Planet Happy DE
2021/01/16 全球购物
医学护理系毕业生求职信
2013/10/01 职场文书
艺术学院毕业生自我评价
2014/03/02 职场文书
园艺师求职信
2014/03/10 职场文书
元旦促销方案
2014/03/15 职场文书
网络信息安全承诺书
2014/03/26 职场文书
经贸专业毕业生求职信范文
2014/05/01 职场文书
政法干警核心价值观心得体会
2014/09/11 职场文书
个人委托书如何写
2014/09/25 职场文书
信息技术课教学反思
2016/02/23 职场文书
JavaScript数组reduce()方法的语法与实例解析
2021/07/07 Javascript
Java中的继承、多态以及封装
2022/04/11 Java/Android
java实现web实时消息推送的七种方案
2022/07/23 Java/Android
SpringBoot前端后端分离之Nginx服务器下载安装过程
2022/08/14 Servers