yii2 DetailView根据数值显示对应的文本一点小技巧 [ 技术分享 ]
view页面里面的DetailView 使用非常方便,但是没法像GridView一样使用匿名函数将数字对应显示为文本。百度了一下,大致有几种方式来转换。 (本文原创,转载请注明来之http://www.yiichina.com/ 作者 李东涛) 1 利用简写的条件语句,可以简单的数字里返回出简单的文本。如:
['attribute'=>'sex',
'value'=>$model->sex==1?'男':'女'],
这样就可以让sex为1的时候,返回‘男’,否则返回‘女’。但是如果增加一选项,比如说sex==2 ,返回‘保密’,这个语句就无能为力了。 2 第二种方法,就是在view页面写一个自定义函数 ,预先处理字符串,这样就可以处理复杂的选项了,如:
<?php
//......
function switchsex($int){
switch($int){
case 0:
return '女';
braek;
case 1:
return '男';
braek;
case 2:
return '不男不女';
braek;
case 3:
return '不详';
braek;
......}
}
//......
//然后调用它
$sexstr=switchsex($model->sex);
//最后在DetailView中显示出来:
['attribute'=>'sex',
'value'=>$model->$sexstr],
?>
虽然最后达到了显示效果,但是总觉得太繁琐,尤其是在view中写自定义函数,有违MVC框架的架构理念。经过苦思冥想,发现,简单的条件判断嵌套,也能达到显示效果。写法如下:
['attribute'=>'sex',
'value'=>$model->sex==1?'男':$model->sex==0?'女':'不男不女'],
这样执行的顺序就是 如果sex等于1,返回‘男’,否则 ,再判断,如果sex=0返回‘女’,否则,返回‘不男不女’。 经过测试,3个选项的简单判断,能达到效果。 如果有四个选项,或者更多选项,我们仿照写下去试试:
['attribute'=>'sex',
'value'=>$model->sex==1?'男':$model->sex==0?'女':$model->sex==2?'不男不女':'不详'],
执行结果无论sex是什么值,都只显示最后一项‘不详’。 没法去深究php执行这个语句的顺序,但是猜测出现这样的问题是php执行的判断嵌套语句的顺序出现了问题,如果真是顺序问题,那就简单了,改写如下:
['attribute'=>'sex',
'value'=>$model->sex==1?'男':($model->sex==0?'女':($model->sex==2?'不男不女':'不详))'],
测试通过!! 用括号引导执行顺序,再多的判断,也能搞定,是不是很简单啊。 本文原创,转载请注明来之http://www.yiichina.com/ 作者 李东涛 希望本文对你有所帮助。
共 0 条回复
没有找到数据。
李东涛
注册时间:2017-03-26
最后登录:2019-10-24
在线时长:6小时13分
最后登录:2019-10-24
在线时长:6小时13分
- 粉丝0
- 金钱85
- 威望0
- 积分145