Yii - 填充下拉列表

时间:2013-05-08 11:16:23

标签: php yii yii-components dropdownbox

我想从数据库中获取productTypes的列表,并将它们输出到下拉列表,然后将其用于ajax填充第二个下拉列表。

步骤1:Controller从数据库获取productTypes 第2步:Controller将productTypes对象转换为列表 步骤3a:输出列表以在视图中进行测试 步骤3b:使用列表视图填充下拉列表

控制器片段

public function init()
{

    $this->dynamicTypes();
    $this->render('calculator', array('types' => $this->_types));
}


public function dynamicTypes()
{
    $this->_types = CHtml::listData(ProductType::model()->findAll(), 'id', 'type');
}

查看文件摘要

<?php
    // Step 3a (this works fine)
    echo '<pre>';
        print_r($types);
    echo '</pre>';

    // Step 3b - Returns an error
    echo $form->dropDownList('productTypes',1, array($types));
?>

<?php $this->endWidget(); ?>

</div>

在步骤3b中,我尝试了以下内容:

echo $form->dropDownList('productTypes',1, array($types));
Error Msg: get_class() expects parameter 1 to be object, string given

根据http://www.yiiframework.com/doc/api/1.1/CHtml#dropDownList-detail,dropDownList方法采用以下参数:

public static string dropDownList(string $name, string $select, array $data, array $htmlOptions=array ( ))

其中第一个参数是字符串,表示输入字段的名称。

我做错了什么,如何解决这个问题?

更新

echo CHtml::dropDownList('productTypes',1, array($types));

似乎有效,但是当我查看视图中的下拉列表时,由于某种原因,下拉列表中有一个0。出于某种原因,它将选项放入选项组

<select name="productTypes" id="productTypes">
<optgroup label="0">
<option value="1">Scrap</option>
<option value="2">Coin</option>
<option value="3">Bar</option>
</optgroup>
</select>

解决: 已移除array($types),仅替换为$types

echo CHtml::dropDownList('productTypes',1, $types);

1 个答案:

答案 0 :(得分:1)

似乎$formCActiveForm类的对象。此版本的dropDownList方法采用CModel类的实例。

请参阅此处的方法签名CActiveForm::dropDownList

使用

echo CHtml::dropDownList('productTypes',1, array($types));

而不是

echo $form->dropDownList('productTypes',1, array($types));