带有复杂$ textField的CHtml :: listData

时间:2012-03-14 10:49:34

标签: php yii yii-components

我想在模型中使用一些属性textField。像这样:

$form->dropDownList(
    $formModel, 
    'ref_attribute', 
    CHtml::listData(
        User::model()->findAll(array('order'=>'attribute1 ASC, attribute2 ASC')), 
        'id', 
        'attribute1 attribute2 (attribute3)'), 
    array()
);

以便'attribute1 attribute2 (attribute3)'自动转换为正确的属性值。我试过“按原样”('attribute1 attribute2 (attribute3)')编写它,并在模型中创建一个中间函数(fullName()),但似乎没有任何效果。

提前致谢。

2 个答案:

答案 0 :(得分:11)

可以在Model类中创建一个额外的方法。您必须创建一个getter并将其with the yii magic用作普通属性。

所以你的模板中有:

$form->dropDownList(
    $formModel, 
    'ref_attribute', 
    CHtml::listData(
        User::model()->findAll(array('order'=>'attribute1 ASC, attribute2 ASC')), 
        'id', 
        'fullName'), 
    array()
);

在你的模特中:

public function getFullName()
{
    return $this->attribute1.' '.$this->attribute2.' ('.$this->attribute3.')';
}

答案 1 :(得分:1)

如果您的PHP版本大于5.3,那么您可以使用匿名函数:

$form->dropDownList(
    $formModel, 
    'ref_attribute', 
    CHtml::listData(
        User::model()->findAll(array('order'=>'attribute1 ASC, attribute2 ASC')), 
        'id', 
        function($model){
            return $model->attribute1.' '.$model->attribute2.' ('.$this->attribute3.')';
        }
    ), 
    array()
);