好消息 微信小程序上线啦,看视频更方便。点击查看小程序码

Yii2利器GridView秘籍 / GridView之ActiveColumn列说明

阿北哥ya 431次阅读
Yii

这是我们Column最后一篇 - ActionColumn,接下来我们会针对不同的需求做一些实战的教程。

之前的文章列表

开始正文...

什么是ActionColumn?如名字一样,这一列都是操作项,它一般位于表格的最后,表示对此行记录的行为操作,比如删除、编辑等等。

在日常开发中,表格记录的操作最常见的就是浏览、编辑和删除,因此ActionColumn默认提供了这三种操作,你只需要一行代码即可。

如下

GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => [
        'id',
        'username',
        [
            'class' => ActionColumn::className(),
        ]
    ]
]);

没错,就是一行,效果图看看

在这里ActionColumn会获取当前的控制器xxx并且渲染出浏览(xxx/view)、编辑(xxx/update)和删除(xxx/delete)三个按钮,要注意的是这里使用了bootstrap框架,你如果取消了则按钮图标不会正常显示。

不同的控制器

当然你可能会问,如果上面的按钮不指向当前控制器那?这也很简单

GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => [
        'id',
        'username',
        [
            'class' => ActionColumn::className(),
            'controller'=>'控制器的名字',
        ]
    ]
]);

通过配置controller即可,当然方法不止这一种,本文会陆续说到。

不用默认的actions

我们的需求是时刻变化的,单纯的三个操作已经不能满足我了,需要自定义,那怎么办?

没关系,ActionColumn还为我们提供了模板功能(template),比如我要设置操作为一个会员的所有订单和地址管理

GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => [
        'id',
        'username',
        [
            'class' => ActionColumn::className(),
            'template'=>'{orders}{addrs}',
        ]
    ]
]);

是的,使用template,每个操作用大括号圈起来{},并且在template值中也可以使用html代码,比如使用br进行换行。

你刷新了一下浏览器,发现并没有生效,这是因为我们现在仅仅是设置了template,但是还没有进行渲染,接下来使用ActionColumn的buttons属性定义每一个操作,如下。

GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => [
        'id',
        'username',
        [
            'class' => ActionColumn::className(),
            'template'=>'{orders}{addrs}',
            'buttons' => [
                'orders' => function ($url, $model, $key) {
                    return \yii\helpers\Html::a("订单",$url);
                },
                'addrs' => function ($url, $model, $key) {
                    return \yii\helpers\Html::a("地址管理",['/user/addrs','id'=>$key]);
                },
            ]
        ]
    ]
]);

template和buttons成对出现,buttons是一个数组,数组每项的key就是template中对应的每个操作名字,比如orders和addrs,数组中的value就是针对此操作的结果,它是一个匿名函数,函数的返回表示最后template中的这个操作到底是什么?

比如上文中的orders将呈现为一个超级链接,名字是订单,地址是$url。我们也可以将匿名函数返回false,这样在相关行中此操作就消失了。

接下来要说下buttons中的匿名函数,此函数有3个参数

因为buttons中每一项的value是一个匿名函数,返回是高度自由的,甚至你能自己拼凑一组html代码,这都可以。

visibleButtons

在上面我们知道可以通过buttons中匿名函数返回false的形式让一个操作消失,对此需求ActionColumn还提供了专门的配置项,那就是visibleButtons。

visibleButtons负责让某些操作消失,它也是一个数组,数组的key依然是template中的每个操作,但是只有在visibleButtons中的操作才会进入监控。

对于visibleButtons的用法如下

...
'buttons'=>[...]
'visibleButtons'=>[
    'orders'=>function ($model, $key, $index){
        if($key == 11){
            return true;
        }
        return false;
    }
]

正如上面的代码,我们要将orders操作放到监听状态,数组的value有两个备选

无论哪个形式,返回为true表示显示,否则不显示(返回false或没有返回)

如上,当记录$key等于11的时候则隐藏订单操作,否则显示,效果图如下。

urlCreator

自定义url生成,在上面的讲解中我们看到,许多场景下ActionColumn都可以为我们生成一个$url,直接引用即可,它调用的是yii2的createUrl方法,生成比如index.php?r=user/update&id=11这样。

但是有的时候我们希望去修改$url,比如增加一些参数,这个时候可以配置ActionColumn的urlCreator,如下操作

'urlCreator'=>function($action, $model, $key, $index){
    return \yii\helpers\Url::to([$action,'id'=>$key,'from'=>'wechat']);
}

urlCreator接收一个匿名函数,最后返回一个字符串(url地址),匿名函数有4个参数,其中$action代表当前操作的名字,比如template中的orders和addrs。

在上面的代码中我们为每个了解增加了一个from=wechat参数,代表来自微信端。

buttonOptions

此选项是为操作增加一些属性,但是它只作用于默认的操作(view、update、delete),比如如下操作

echo GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => [
        'id',
        'username',
        [
            'class' => ActionColumn::className(),
            'buttonOptions' => [
                'title' => '我是标题',
            ],
        ]
    ]
]);

则效果如下

小结

到此刻ActionColumn的所有属性就为大家介绍完毕,和GridView相关的核心类库也就说完了,接下来我们会进入实战篇,针对不同场景不同需求给出你的GridView解决方案,并教你去通过衍生GridView子类实现更加个性化的功能。

此文编号为423 上次更新于4个月前 / Yii 频道
留言
小提醒 欢迎大家留言并且我会拿出时间去看,当然我会删除那些被视为垃圾或广告的留言。
暂时没有回复
首页 学员登录 注册