yii dropdownList显示相同的值?

时间:2012-11-15 17:48:23

标签: drop-down-menu yii

我项目的前任并没有在表格中保存下拉列表值;他们在html文件中...这个家伙也没有使用$form->dropdownList()来创建选择......

当然,我现在遇到了在编辑时预先选择值的巨大问题;因此我将所有<select>更改为$form->dropdownList()

但现在我有一个不同的问题,如

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

现在为DB ...

生成整数值

我知道我可以像这样设置显示值: 数组(&#34; Art&#34; =&gt;&#34; Art&#34;).... 但我宁愿避免这种情况 - 有很多观点直接显示价值...... :(

有没有办法告诉yii DB值应该与显示值相同?

3 个答案:

答案 0 :(得分:5)

如果数组值是唯一的(Yii需要唯一键),则可以使用...

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

array_combine将对listdata的键和值使用相同的数据。

答案 1 :(得分: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();

答案 2 :(得分:0)

Harry B的回答非常好,谢谢!在我的例子中,我想使用自定义选项值并包含提示,因此为了扩展他的示例,我创建了一个返回键和值数组的方法。 keys数组以'prompt'开头,'values'数组以'(select)'开头,然后我遍历我的数据源并将每个键添加到keys数组,每个值添加到values数组。我的代码有点复杂,涉及正则表达式,但这是基本的要点:

// Controller method popupRowListValues($source)
$displayKeys = array('prompt');
$displayValues = array('select');

foreach ($source as $key=>$value) {
    $displayKeys[] = $key;
    $displayValues = $value;
}

// View
$displayList = $this->popupRowListValues($source);

echo $form->dropDownListRow($model, $column_name, array_combine(
    $displayList['displayKeys'], $displayList['displayValues']
));