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模板引擎SMARTY
Oct 09 PHP
VFP与其他应用程序的集成
Oct 09 PHP
使用PHP和XSL stylesheets转换XML文档
Oct 09 PHP
打造超酷的PHP数据饼图效果实现代码
Nov 23 PHP
linux系统下php安装mbstring扩展的二种方法
Jan 20 PHP
php实现给图片加灰色半透明效果的方法
Oct 20 PHP
php判断用户是否手机访问代码
Jun 08 PHP
php中smarty变量修饰用法实例分析
Jun 11 PHP
PHP获取input输入框中的值去数据库比较显示出来
Nov 16 PHP
PHP判断数组是否为空的常用方法(五种方法)
Feb 08 PHP
php mysql_list_dbs()函数用法示例
Mar 29 PHP
php转换上传word文件为PDF的方法【基于COM组件】
Jun 10 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中如何实现常用邮箱的基本判断
2014/01/07 PHP
php快递单号查询接口使用示例
2014/05/05 PHP
linux下使用crontab实现定时PHP计划任务失败的原因分析
2014/07/05 PHP
thinkPHP模板中函数的使用方法示例
2016/11/30 PHP
PHPCMS手机站伪静态设置详细教程
2017/02/06 PHP
PHP匿名函数(闭包函数)详解
2019/03/22 PHP
php连接sftp的作用以及实例代码
2019/09/23 PHP
PHP 数组操作详解【遍历、指针、函数等】
2020/05/13 PHP
10个基于jQuery或JavaScript的WYSIWYG 编辑器整理
2010/05/06 Javascript
基于jquery &amp; json的省市区联动代码
2012/06/26 Javascript
JS中数组Array的用法示例介绍
2014/02/20 Javascript
深入解读JavaScript中的Hoisting机制
2015/08/12 Javascript
javascript原生ajax写法分享
2016/04/10 Javascript
ES6新特征数字、数组、字符串
2016/10/01 Javascript
Node.js使用orm2进行update操作时关联字段无法修改的解决方法
2017/06/13 Javascript
mui框架移动开发初体验详解
2017/10/11 Javascript
默认浏览器设置及vue自动打开页面的方法
2018/09/21 Javascript
Vue+element 解决浏览器自动填充记住的账号密码问题
2019/06/11 Javascript
Vue 实现html中根据类型显示内容
2019/10/28 Javascript
jquery获取input输入框中的值
2019/11/13 jQuery
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
2016/11/16 Python
Python基础语言学习笔记总结(精华)
2017/11/14 Python
python PyTorch参数初始化和Finetune
2018/02/11 Python
python实现多线程网页下载器
2018/04/15 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
2019/02/13 Python
python re的findall和finditer的区别详解
2020/11/15 Python
CSS3 画基本图形,圆形、椭圆形、三角形等
2016/09/20 HTML / CSS
canvas探照灯效果的示例代码
2018/11/30 HTML / CSS
护理专科自荐书范文
2014/02/18 职场文书
职业生涯规划书范文
2014/03/10 职场文书
2014年管理工作总结
2014/11/22 职场文书
2015年语文教研组工作总结
2015/05/23 职场文书
岁月神偷观后感
2015/06/11 职场文书
某学校的2019年度工作报告范本
2019/10/11 职场文书
Mac环境Nginx配置和访问本地静态资源的实现
2021/03/31 Servers
python代码实现备忘录案例讲解
2021/07/26 Python