1

プロジェクトの前任者は、ドロップダウン リストの値をテーブルに保存しませんでした。$form->dropdownList()それらはhtmlファイルにありました...男はまた、選択を作成するために使用しませんでした...

もちろん、編集時に値を事前に選択する際に大きな問題が発生しました。<select>したがって、すべてをに変更しました$form->dropdownList()

しかし今、私は別の問題を抱えています。

echo $form->dropdownList($model,'location',
        array("Art","Gallery","Bar","Club"));

DBの整数値を生成するようになりました...

次のように表示値を設定できることはわかっています: array("Art" => "Art").... しかし、それは避けたいと思います - 値を直接表示するビューがたくさんあります... :(

DB 値が表示値と同じであることを yii に伝える方法はありますか?

4

3 に答える 3

6

配列の値が一意である場合 (Yii には一意のキーが必要です)、次を使用できます...

$data = array("Art","Gallery","Bar","Club");
echo $form->dropdownList($model,'location', array_combine($data, $data));

array_combinelistdata のキーと値の両方に同じデータを使用します。

于 2013-02-06T11:32:37.193 に答える
0

次のようにウィジェットdropDownListのメソッドをオーバーライドできます。CActiveForm

<?php
class ActiveForm extends CActiveForm
{
    public $valuesAsKeys = false;

    public function dropDownList($model,$attribute,$data,$htmlOptions=array())
    {
        if (!$this->valuesAsKeys)
            return parent::dropDownList($model, $attribute, $data, $htmlOptions);

        $newData = array();
        foreach ($data as $value)
            $newData[$value] = $value;
        return parent::dropDownList($model, $attribute, $newData, $htmlOptions);
    }
}

そして、次のように使用します。

<?php
$form = $this->beginWidget("application.components.ActiveForm", array(
    'valuesAsKeys' => true,
    // other parameters here
));

// Rendering form's elements here
$this->endWidget();
于 2012-11-15T18:15:30.940 に答える