CHtml :: listData со сложным $ textField - PullRequest
6 голосов
/ 14 марта 2012

Я бы хотел использовать пару атрибутов из модели как 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 ]

11 голосов
/ 14 марта 2012

Это возможно, создав дополнительный метод в вашем классе Model. Вы должны создать геттер и использовать его с магией 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.')';
}
1 голос
/ 07 октября 2014

Если у вас 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()
);
...