6

我想使用模型中的几个属性作为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()),但似乎没有任何效果。

提前致谢。

4

2 回答 2

11

可以通过在 Model 类中创建一个额外的方法来实现。您必须创建一个 getter 并将其与 yii 魔法一起用作普通属性。

所以你的模板中有:

$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.')';
}
于 2012-03-14T11:43:20.680 回答
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()
);
于 2014-10-07T13:19:22.717 回答