我的教师模型中有一个函数,它返回类别数组。
getCaterogies() {
return array('1' => 'short tempered', '2' => 'funny', '3' => 'visionary', ...);
}
我将索引存储在数据库中,并使用与该对应的数组的值在任何地方显示值。
$categories = $teacher->categories;
$category = $categories[$teacher->category];
我这样做是因为一旦有人建议我不要将字符串存储在状态数据库中,而是存储整数值,并将转换存储在数据库中或在ht模型中定义。字符串的问题在于它们在比较中更容易出现人为错误。可能是因为区分大小写。
现在我面临的问题是,在gridview中显示值时,我需要在值字段中写入2行,但它是一个表达式,外部变量也不需要。
我怎样才能让这个工作用于gridview?
答案 0 :(得分:47)
您可以使用匿名函数作为值$row
,$data
参数,其中$row
包含行号(从零开始),$data
包含数据模型为行。
这样你就可以在里面定义它。
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
'columns'=>array(
array(
'name'=>'..',
'value'=>function($data,$row){
$categories = $teacher->categories;
return $categories[$data->category];
},
),
),
));
如果你想从外面使用它,你可以依赖PHP的use
:
$categories = $teacher->categories;
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
'columns'=>array(
array(
'name'=>'..',
'value'=>function($data,$row) use ($categories){
return $categories[$data->category];
},
),
),
));
我个人会推荐第二个,因为这样的数组计算只会一次,并且会在所有情况下使用。
答案 1 :(得分:2)
你可以写
$categories = $teacher->categories;
$category = $categories[$teacher->category];
在一行中:
$category = $teacher->categories[$teacher->category];
另外,我建议您使用其他解决方案:
class ModelClass
{
const STATUS_SHORT_TEMPERED = 1;
const STATUS_FUNNY = 2;
const STATUS_VISIONARY = 3;
}
这允许您使用更具语义性的
ModelClass::STATUS_FUNNY;
而不是较少的语义
2;
此外,您可以这样组成阵列:
getCaterogies() {
return array(
ModelClass::STATUS_FUNNY => 'status funny',
...
);
}
答案 2 :(得分:0)
'urlCreator' => function ($action, $model, $key, $index) use($under_category) {