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()みましたが()、何もうまくいかなかったようです。

前もって感謝します。

4

2 に答える 2

11

Modelクラスに追加のメソッドを作成することで可能になります。ゲッターを作成し、通常のプロパティとしてyiiマジックで使用する必要があります。

したがって、テンプレートには次のようなものがあります。

$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.')';
}
于 2012-03-14T11:43:20.680 に答える
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()
);
于 2014-10-07T13:19:22.717 に答える