CHtml::listData mit einem komplexen $textField
-
13-12-2019 - |
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.
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()
);