2012-03-14 9 views
6

Chciałbym użyć kilku atrybutów z wewnątrz modelu jako textField. Coś takiego:

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

tak że 'attribute1 attribute2 (attribute3)' jest automatycznie tłumaczone na prawidłowe wartości atrybutów. Próbowałem napisać go "tak jak jest" ('attribute1 attribute2 (attribute3)') i tworząc środkową funkcję wewnątrz modelu (fullName()), ale nic nie działało.

Z góry dziękuję.

Odpowiedz

11

Jest to możliwe, tworząc dodatkową metodę w klasie Model. Musisz utworzyć gettera i użyć go jako normalnej właściwości.

Więc masz w szablonie:

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

A w modelu:

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

To doskonale działało! Dzięki @cebe! – Korcholis

+0

Bardzo pomocny! Dzięki! – saada

1

Jeśli masz PHP w wersji wyższej niż 5.3, można korzystać z anonimowych funkcje:

$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() 
); 
Powiązane problemy