GridView以及DetailView的数据格式化 [ 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里用报错,暂时不知道为什么,有知道的欢迎回复一下。
kissgxd
注册时间:2015-06-09
最后登录:2019-05-07
在线时长:26小时5分
最后登录:2019-05-07
在线时长:26小时5分
- 粉丝3
- 金钱3810
- 威望30
- 积分4370
共 2 条评论
DetailView 如果想要实现 GridView 匿名函数的功能,该怎么写呢
因为 GridView 的数据是通过循环来显示的,所以在循环的时候可以执行特定的操作, 而 Detailview 是一次性展示完成所有的数据,而这些数据是可以格式化好再传到 Detailview 的, 所以不需要再调用匿名函数了;
我个人是这样理解的,有说得不对的地方,请多多谅解;
在detailView中我使用匿名函数进行格式化操作正常,无报错问题