Question

J'aimerais utiliser quelques attributs d'un modèle comme textField.Quelque chose comme ça:

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

de sorte que 'attribute1 attribute2 (attribute3)' est automatiquement traduit en valeurs d'attribut correctes.J'ai essayé de l'écrire "tel quel" ('attribute1 attribute2 (attribute3)'), et créer une fonction intermédiaire à l'intérieur du modèle (fullName()), mais rien ne semblait fonctionner.

Merci d'avance.

Était-ce utile?

La solution

C'est possible en créant une méthode supplémentaire dans votre classe Model.Vous devez créer un getter et l'utiliser avec la magie yii comme une propriété normale.

Vous avez donc dans votre modèle :

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

Et dans ton modèle :

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

Autres conseils

Si vous avez PHP de version supérieure à 5.3 alors vous pouvez utiliser des fonctions anonymes :

$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()
);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top