Php Yii gridview在值中使用外部变量

Php Yii gridview在值中使用外部变量,php,gridview,yii,Php,Gridview,Yii,我的教师模型中有一个函数,它返回categories数组 getCaterogies() { return array('1' => 'short tempered', '2' => 'funny', '3' => 'visionary', ...); } 我将索引存储在数据库中,并使用与之对应的数组的值到处显示值 $categories = $teacher->categories; $category = $categories[$teacher->ca

我的教师模型中有一个函数,它返回categories数组

getCaterogies() {
   return array('1' => 'short tempered', '2' => 'funny', '3' => 'visionary', ...);
}
我将索引存储在数据库中,并使用与之对应的数组的值到处显示值

$categories = $teacher->categories;
$category = $categories[$teacher->category];
我这样做是因为有人建议我不要在数据库中存储状态字符串,而是存储整数值,或者在数据库中存储转换,或者在ht模型中定义转换。字符串的问题是,它们在比较中更容易出现人为错误。可能是因为案件敏感

现在我面临的问题是,在gridview中显示值时,我需要在一个值字段中写入2行,但它是一个表达式,外部变量也不需要

我怎样才能使它在gridview中工作?

您可以编写

$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',
        ...
    );
}

您可以使用匿名函数作为值,该值可以采用
$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];
            },
        ),
    ),
));

我个人推荐第二种方法,因为这样数组的计算将只进行一次,并且将在所有情况下使用。

'urlCreator'=>函数($action,$model,$key,$index)使用($under_category){

你确定
$category=$teacher->categories[$teacher->categories]
会成功的,因为它是模型中的一个动态getter,getter会返回数组。谢谢你的时间和建议,但我要找的正是另一个人的答案,在许多其他情况下,我可能需要这个解决方案。在这种情况下,你的解决方案工作得非常完美,但最近我可能需要这样的
使用素材..stackoverflow不允许我向上投票..:(提示:如果需要-您可能需要调用模型函数(针对每个记录),以返回要在所述记录的不同gridview列中打印的多个值。您可以通过第一列调用函数,并使用结果更新$categories。因此,其他列只能从$categories中读取。为此,请通过引用“使用”参数(如果包含参数,只需在参数前面添加一个符号(&),而不是在函数内部)。'value'=>函数($data,$row)使用(&$categories){$categories=…},