2012-03-14 32 views
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()),但似乎沒有任何工作。

在此先感謝。

回答

11

可以在Model類中創建一個額外的方法。您必須創建一個吸氣劑,並將其作爲正常屬性使用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.')'; 
} 
+0

它完美的工作!謝謝@cebe! – Korcholis 2012-03-14 16:25:18

+0

非常有幫助!謝謝! – saada 2012-10-12 23:19:01

1

如果您擁有的版本比5.3更高的PHP,那麼你可以使用匿名函數:

$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() 
);