2012-03-14 14 views
6

Me gustaría utilizar un par de atributos dentro de un modelo como textField. Algo como esto:

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

modo que 'attribute1 attribute2 (attribute3)' se traduce automáticamente en los valores de los atributos correctos. Intenté escribirlo "tal como está" ('attribute1 attribute2 (attribute3)') y crear una función intermedia dentro del modelo (fullName()), pero nada parecía funcionar.

Gracias de antemano.

Respuesta

11

Es posible creando un método adicional en su clase de modelo. Tienes que crear un getter y usarlo with the yii magic como una propiedad normal.

Por lo que tiene en su plantilla:

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

Y en su modelo:

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

¡Funcionó perfectamente! Gracias @cebe! – Korcholis

+0

¡Muy útil! ¡Gracias! – saada

1

Si tiene PHP de la versión superior a 5.3, puede utilizar funciones anónimas:

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