18

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

getCaterogies() {
   return array('1' => 'short tempered', '2' => 'funny', '3' => 'visionary', ...);
}

我将索引存储在数据库中,并使用与该数组对应的数组的值在任何地方显示值。

$categories = $teacher->categories;
$category = $categories[$teacher->category];

我这样做是因为曾经有人建议我不要在数据库中存储作为状态的字符串,而是存储整数值,并将转换存储在数据库中或在 ht 模型中定义它。字符串的问题在于它们在比较中更容易出现人为错误。也许是因为区分大小写。

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

我怎样才能让它为gridview工作?

4

3 回答 3

48

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

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

于 2012-07-21T17:21:11.600 回答
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',
        ...
    );
}
于 2012-07-21T17:18:40.303 回答
0

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

于 2021-04-28T11:49:11.630 回答