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 mb_convert_encoding 获取字符串编码类型实现代码
Apr 26 PHP
ThinkPHP采用模块和操作分析
Apr 18 PHP
php中禁止单个IP与ip段访问的代码小结
Jul 04 PHP
PHP Curl多线程原理实例详解
Nov 06 PHP
PHP5各个版本的新功能和新特性总结
Mar 16 PHP
Laravel 5框架学习之模型、控制器、视图基础流程
Apr 08 PHP
PHP中读取文件的几个方法总结(推荐)
Jun 03 PHP
PHP数组实例详解
Jun 26 PHP
微信红包随机生成算法php版
Jul 21 PHP
ajax调用返回php接口返回json数据的方法(必看篇)
May 05 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
Jun 06 PHP
PHP curl批处理及多请求并发实现方法分析
Aug 15 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注入点构造代码
2008/06/14 PHP
PHP中判断变量为空的几种方法小结
2013/11/12 PHP
PHP小偷程序的设计与实现方法详解
2016/10/15 PHP
PHP防止图片盗用(盗链)的方法小结
2016/11/11 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
PHP中define() 与 const定义常量的区别详解
2019/06/25 PHP
jquery中的$(document).ready()与window.onload的区别
2009/11/18 Javascript
js 表格隔行颜色
2009/12/02 Javascript
js判断选择时间不能小于当前时间的示例代码
2013/09/24 Javascript
jquery自定义函数的多种方法
2014/01/09 Javascript
Node.js的项目构建工具Grunt的安装与配置教程
2016/05/12 Javascript
Bootstrap3学习笔记(三)之表格
2016/05/20 Javascript
js数字计算 误差问题的快速解决方法
2017/02/28 Javascript
Vue.js 2.0学习教程之从基础到组件详解
2017/04/24 Javascript
lhgcalendar时间插件限制只能选择三个月的实现方法
2017/07/03 Javascript
React Native 集成jpush-react-native的示例代码
2017/08/16 Javascript
浅谈一个webpack构建速度优化误区
2019/06/24 Javascript
js 实现 list转换成tree的方法示例(数组到树)
2019/08/18 Javascript
Python做文本按行去重的实现方法
2016/10/19 Python
python 全文检索引擎详解
2017/04/25 Python
flask中使用蓝图将路由分开写在不同文件实例解析
2018/01/19 Python
python使用多进程的实例详解
2018/09/19 Python
基于Python在MacOS上安装robotframework-ride
2018/12/28 Python
对python中的控制条件、循环和跳出详解
2019/06/24 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
2019/09/16 Python
Django操作session 的方法
2020/03/09 Python
jupyter notebook参数化运行python方式
2020/04/10 Python
django下创建多个app并设置urls方法
2020/08/02 Python
Python如何进行时间处理
2020/08/06 Python
《将心比心》教学反思
2014/04/08 职场文书
财务人员担保书
2014/05/13 职场文书
2014房屋登记授权委托书
2014/10/13 职场文书
大学生各类奖学金申请书
2019/06/24 职场文书
vue使用v-model进行跨组件绑定的基本实现方法
2021/04/28 Vue.js
使用nginx配置访问wgcloud的方法
2021/06/26 Servers
浅谈MySQL之select优化方案
2021/08/07 MySQL