文档章节

[yii2小心肝儿]GridView - 大衣篇

阿北2017
 阿北2017
发布于 2017/02/08 16:14
字数 1179
阅读 62
收藏 0

增删改查,数据库操作的四大法宝中最常用的就是查了,一条记录、几条记录、一大堆记录。对于yii2而言,尤其后台,GridView是最常用且好用的数据列表部件,今天就说一说。

yii\grid\GridView;

GridView将结果集显示为表格(table),我们从一个项目开始开始。 一天客户老郑(郑讯)来到这里,说要我做一个页面,将所有的会员分页显示在列表里,每页10条数据,并且能按照表头排序。 好吧~

我查询了数据库的user表

id username password create_time sex province city
1 abei dWRvDOMGjvGQZMGlxFR2xfhsfGpzu8Rx 1479876598 1 北京 北京
2 郑讯 dWRvDOMGjvGQZMGlxFR2xfhsfGpzu8Rx 1479876698 0 黑龙江 哈尔滨
11 马化腾 dWRvDOMGjvGQZMGlxFR2xfhsfGpzu8Rx 1479877598 1 黑龙江 齐齐哈尔
19 马云 dWRvDOMGjvGQZMGlxFR2xfhsfGpzu8Rx 1479886598 1 黑龙江 嫩江

然后我决定使用GridView来显示这些数据,这样分页、排序都直接搞定了,我知道需要两步

第一步是在控制器UserController.php里获得结果集

    public function actionIndex(){
        $query = User::find();
        
        $dataProvider = new ActiveDataProvider([
            'query'=>$query,
            'pagination'=>[
                'pagesize'=>10
            ]
        ]);
        
        return $this->render('index',[
            'dataProvider'=>$dataProvider
        ]);
    }

第二部渲染视图 index.php

    use yii\grid\GridView;
    
    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'columns' => [
            'id',
            'username',
            'create_time',
            'sex',
            'province',
            'city'
        ]
    ]);?>

完活了,聪明的GridView会搞定一切,我只需要将$dataProvider传递给ta,并且告诉他都要显示User模型(user表)的那些属性,放到columns数组中即可。 就这样,表格出来了,且每个表都都能排序,客户的需求达到了。

输入图片说明

30分钟后我拿给郑讯看,见他默默无语,说了几句话。

  • 表头改成编号、用户名、生成时间等,不要英文。
  • 会员生成时间我看不懂,改成年月日十分秒吧
  • 性别改成男or女
  • 省市两列合并,像province-city这样

恩,客户是上帝,改改吧~,主要是我知道:"这个其实很简单,GridView都能轻松搞定"

对于表头的显示,GridView是根据User模型的attributeLabels函数来决定的,现在就改 User.php

   /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'create_time' => 'Create Time',
            'username'=>'Username',
            'password'=>'Password',
            'sex'=>'Sex',            
        ];
    }

现在就改,60秒过去了

   /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => '编号',
            'create_time' => '生成时间',
            'username'=>'用户名',
            'password'=>'Password',
            'sex'=>'性别',            
        ];
    }

但是,我发现省市怎么没有,哦,想起来了,province和city是我后来添加到数据表的,并没有更新User模型,那我直接加上就可以了。 最终版

   /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => '编号',
            'create_time' => '生成时间',
            'username'=>'用户名',
            'password'=>'Password',
            'sex'=>'性别',     
            'province'=>'省',
            'city'=>'市'
        ];
    }

🐶🐶🐶搞定,在运行程序,"表头改成编号、用户名、生成时间等,不要英文"这个问题搞定了。

输入图片说明

继续把,现在要处理"会员生成时间我看不懂,改成年月日十分秒吧"这个问题,它也很简单,因为我知道除了向GridView的 columns传递每个属性名字外,我们还能传递一个自定义的数组,格式化数据、逻辑处理,啥都能干出来,相当禽兽。 开始改视图index.php,我只花了10秒钟

index.php

    use yii\grid\GridView;
    
    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'columns' => [
            'id',
            'username',
            [
                'attribute'=>'create_time',
                'format'=>['date', 'php:Y-m-d H:i:s']
            ],
            'sex',
            'province',
            'city'
        ]
    ]);?>

'attribute'=>'create_time'

attribute要填写,代表你在操作那个属性,且在这里排序也是根据他来的。 format是代表对create_time进行什么样的格式化,默认\yii\i18n\Formatter 来对其处理。

刷新浏览器 输入图片说明

又一个山头给我们攻克了。

这里要提一下,[]的功能很强大,上面的实现也可以根据以下代码来实现 index.php

    use yii\grid\GridView;
    
    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'columns' => [
            'id',
            'username',
            [
                'attribute'=>'create_time',
                'value'=>function($data){
                    return date('Y-m-d H:i:s',$data->create_time);
                }
            ],
            'sex',
            'province',
            'city'
        ]
    ]);?>

"性别改成男女",不多言,直接代码

index.php

    use yii\grid\GridView;
    
    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'columns' => [
            'id',
            'username',
            [
                'attribute'=>'create_time',
                'format'=>['date', 'php:Y-m-d H:i:s']
            ],
            [
                'attribute'=>'sex',
                'value'=>function($data){
                    return $data->sex == 1 ? '男' : '女';
                }
            ],
            'province',
            'city'
        ]
    ]);?>

刷新浏览器

输入图片说明

value是一个很好的属性,当你不知道有没有提供内置命令的时候,都可以使用value去用自己的思路实现需求。

还有最后一个,"省市两列合并,像province-city这样",胜利就在前方,我想你已经有了思路。 只需要改一点

   [
        'attribute'=>'province',
        'value'=>function($data){
            return $data->province."-".$data->city;
        }
   ]

是的,你的思路是对的。但是发现一个问题,表头显示"省",ta应该显示"省市"才对,不要紧,我们热烈欢迎label属性出场。

   [
        'label'=>'省市',
        'attribute'=>'province',
        'value'=>function($data){
            return $data->province."-".$data->city;
        }
   ]

最后我看了下。 输入图片说明

不错不错,喝杯茶,一会去给客户看。

10分钟后,我郁闷的回来了,知道这回客户提了那些乱七八糟的需求么?且听下回分解《GridView - 睡衣篇》

© 著作权归作者所有

阿北2017
粉丝 68
博文 58
码字总数 74348
作品 0
洛阳
私信 提问
yii2 modal弹窗之ActiveForm ajax表单异步验证

作者:白狼 出处:http://www.manks.top/yii2modalactiveform_ajax.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责...

白狼栈
2016/06/19
165
0
yii2中如何使用modal弹窗之结合gridview的使用

作者:白狼 出处:http://www.manks.top/document/easyblogmanage_system.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究...

白狼栈
2016/06/14
266
0
yii2开发中19条推荐实践(阿北总结)

虽然每个人的编程风格不同,但是有些建议能让你的代码更加规范和稳定,本次就我这次网站更新总结如下几点,希望对你的yii2学习和使用有所帮助。 环境说明 服务器环境: CentOS 开发环境及IDE...

阿北2017
2018/06/02
151
3
yii2 tree manger 结合girdview的使用方法一种变通解决方案

本文网址:http://my.oschina.net/bubifengyun/blog/605908本文改进版在:https://my.oschina.net/bubifengyun/blog/776979 第十八章 treeview跟Gridview的结合 一、功能设想 yii2做的网站,...

不避风云
2016/01/20
2.1K
8
yii2 rbac权限控制之菜单menu详细教程

作者:白狼 出处:http://www.manks.top/yii2rbacmenu.html本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 ...

白狼栈
2016/04/28
357
0

没有更多内容

加载失败,请刷新页面

加载更多

JS其他类型值转化为Boolean类型规则

本文转载于:专业的前端网站➤JS其他类型值转化为Boolean类型规则 由于最近在笔试的时候,发现好多关于其他类型转化为Boolean类型的题目,因此总结一下! 一、String类型转化为Boolean 1.转化...

前端老手
33分钟前
4
0
EurekaClient自动装配及启动流程解析

在上篇文章中,我们简单介绍了EurekaServer自动装配及启动流程解析,本篇文章则继续研究EurekaClient的相关代码 老规矩,先看spring.factories文件,其中引入了一个配置类EurekaDiscoveryClie...

Java学习录
39分钟前
6
0
析构函数是否必须为虚函数?为何?

p517 在C++中,基类指针可以指向一个派生类的对象。如果基类的析构函数不是虚函数,当需要delete这个指向派生类的基类指针时,就只会调用基类的析构函数,而派生类的析构函数无法被调用。容易...

天王盖地虎626
39分钟前
5
0
【TencentOS tiny】深度源码分析(7)——事件

引言 大家在裸机编程中很可能经常用到flag这种变量,用来标志一下某个事件的发生,然后在循环中判断这些标志是否发生,如果是等待多个事件的话,还可能会if((xxx_flag)&&(xxx_flag))这样子做...

杰杰1号
43分钟前
8
0
聊聊nacos client的ServerHttpAgent

序 本文主要研究一下nacos client的ServerHttpAgent HttpAgent nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/config/http/HttpAgent.java public interface HttpAgent { ......

go4it
49分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部