我的用户模型有3个状态选项(活动,已删除,已阻止)。 在视图中看到它时,它显示为数字1,2或3.我可以通过状态名称来显示它?
Model.php
const STATUS_ACTIVE = 1;
const STATUS_DELETED = 2;
const STATUS_BLOCKED = 3;
Controller.php这样
public function actionAdmin()
{
$model=new Users('search');
$model->unsetAttributes(); // clear any default values
if(isset($_GET['Users']))
$model->attributes=$_GET['Users'];
$this->render('admin',array(
'model'=>$model,
));
}
View.php
<?php $this->widget('bootstrap.widgets.TbGridView',array(
'type'=>'striped bordered condensed',
'id'=>'users-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'name',
'status', // Show 1,2 or 3. I want to get the status name.
),
)); ?>
答案 0 :(得分:2)
在User模型中创建一个名为getStatusName的新方法,该方法返回状态名称。这是一种可行的方法:
public function getStatusName()
{
switch($this->status)
{
case self::STATUS_ACTIVE:
return 'Active';
break;
case self::STATUS_DELETED:
return 'Deleted';
break;
case self::STATUS_BLOCKED:
return 'Blocked';
break;
default:
return 'Unknown';
break;
}
}
然后在你的CGridView中,执行以下操作:
<?php $this->widget('bootstrap.widgets.TbGridView',array(
'type'=>'striped bordered condensed',
'id'=>'users-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'name',
'statusName' // And let Yii do its magic OR be explicit
array('name' => 'status', 'type' => 'text', 'value' => '$data->statusName'),
),
)); ?>
注意:如果您在列配置中使用了短版本,则应将statusName添加到attributeLabels数组
//model.php
public function attributeLabels(){
return array(
//Other labels
'statusName' => 'status',
)
}
这样你也可以在其他地方使用相同的属性,让它表现得像普通属性(只是它是只读的)。