kissgxd 2016-02-01 16:40:21 10260次浏览 2条评论 6 2 0

GridView和DetailView实在是太强大了。

但是正因为如此,这两个也做了很厚实的封装。当有细节调整的时候,有时候就总感觉不如自己写出来的灵活。

各有利弊吧。

这里整理了一下当填充的数据需要格式化时的几种方法,可能不全,找到后随时加。

1.直接在标签里用预置的格式化方式去格式化

如想着格式化一下时间,那么可以这样

[
    'attribute' => 'updated_at',
    'format' => ['date', 'php:Y-m-d H:i:s'],
]

上边的format就是格式方式啦,其他的格式化方式可以去i18n的formatter里去查。

2.直接调取yii的formatter

[
    'attribute' => 'created_at',
    'value'=>  Yii::$app->formatter->asDate($model->created_at,"php:Y-m-d H:i:s"),
],

看了代码就不具体解释了

3.直接调自己写的方法

有时候,可能框架提供的格式化方法并不够用,想自定义一个,那么也可以。

可以把方法定义到model里,或者是自己写一个静态类

调用方法如下

写到model里的可以这么调用

[
    'attribute' => 'status',
    'value'=>  $model->generateStatus(),
],

记得在自己写的方法里return一个字符串作为值。

如果自己写的类,那么调用方式就和i18n的formatter一样了。

4.使用匿名函数方式自定义格式化

代码如下:

            [
                'attribute' => 'created_at',
                'value'=> function($model){
                    return  date('Y-m-d H:i:s',$model->created_at);
                }
            ]

以上方法格式化了时间,但是这种匿名函数的形式只能在GridView里用,Detailview里用报错,暂时不知道为什么,有知道的欢迎回复一下。

觉得很赞
  • 评论于 2016-09-29 15:15 举报

    DetailView 如果想要实现 GridView 匿名函数的功能,该怎么写呢

  • 评论于 2017-02-24 16:14 举报

    以上方法格式化了时间,但是这种匿名函数的形式只能在GridView里用,Detailview里用报错,暂时不知道为什么,有知道的欢迎回复一下。

    因为 GridView 的数据是通过循环来显示的,所以在循环的时候可以执行特定的操作, 而 Detailview 是一次性展示完成所有的数据,而这些数据是可以格式化好再传到 Detailview 的, 所以不需要再调用匿名函数了;

    我个人是这样理解的,有说得不对的地方,请多多谅解;

    1 条回复
    评论于 2017-03-22 11:35 回复

    在detailView中我使用匿名函数进行格式化操作正常,无报错问题

您需要登录后才可以评论。登录 | 立即注册