Yii gridview在值中使用外部变量

d8tt03nd  于 2022-11-09  发布在  其他
关注(0)|答案(3)|浏览(169)

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

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

我在数据库中存储索引,并使用与之对应的数组值在各处显示值。

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

我这样做是因为有人建议我不要在数据库中存储状态字符串,而是存储整数值,或者在数据库中存储转换结果,或者在ht模型中定义转换结果。字符串的问题是在比较时更容易出现人为错误。可能是因为大小写敏感。
现在我面临的问题是,当在gridview中显示值时,我需要在一个值字段中写入2行,但它是一个表达式,而且它不带外部变量。
我怎样才能让这个在gridview上工作?

xyhw6mcr

xyhw6mcr1#

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

我个人推荐第二种方法,因为这种方法对数组的计算只需要一次,并且在所有情况下都可以使用。

2g32fytz

2g32fytz2#

你可以写

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

wyyhbhjk3#

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

相关问题