Frage

Ich möchte ein paar Attribute aus einem Modell verwenden als textField.Etwas wie das:

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

so dass 'attribute1 attribute2 (attribute3)' wird automatisch in die richtigen Attributwerte übersetzt.Ich habe versucht, es so zu schreiben, wie es ist ('attribute1 attribute2 (attribute3)') und Erstellen einer mittleren Funktion innerhalb des Modells (fullName()), aber nichts schien zu funktionieren.

Dank im Voraus.

War es hilfreich?

Lösung

Dies ist möglich, indem Sie eine zusätzliche Methode in Ihrer Model-Klasse erstellen.Sie müssen einen Getter erstellen und verwenden mit der YII-Magie als normales Eigentum.

Sie haben also in Ihrer Vorlage:

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

Und in deinem Modell:

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

Andere Tipps

Wenn Sie PHP mit einer höheren Version als 5.3 haben, können Sie anonyme Funktionen verwenden:

$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()
);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top