我项目的前任并没有在表格中保存下拉列表值;他们在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值应该与显示值相同?
答案 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'] ));