前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >YII2框架中ActiveDataProvider与GridView的配合使用操作示例

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

作者头像
砸漏
发布2020-11-03 15:51:35
1.5K0
发布2020-11-03 15:51:35
举报
文章被收录于专栏:恩蓝脚本

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

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

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

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

我们创建一个用户模型MyUser.php,代码如下:

代码语言:javascript
复制
<?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,代码如下:

代码语言:javascript
复制
<?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,代码如下:

代码语言:javascript
复制
<?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 

显示结果如下:

更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档