李东涛 2018-01-23 20:36:58 3401次浏览 0条回复 1 1 0

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/ 作者 李东涛 希望本文对你有所帮助。

觉得很赞
    没有找到数据。
您需要登录后才可以回复。登录 | 立即注册