Я хочу получить список productTypes
из базы данных и вывести их в раскрывающийся список, который затем будет использоваться для создания ajax второго раскрывающегося списка.Yii - заполнение выпадающего списка
Шаг 1: Контроллер получает productTypes
из базы данных Шага 2: Контроллер преобразует productTypes
объекта в списке Шага 3a: список вывода для тестирования в виде Шага 3b: Заполняет выпадающий список с просмотром списка
Snippet контроллера
public function init()
{
$this->dynamicTypes();
$this->render('calculator', array('types' => $this->_types));
}
public function dynamicTypes()
{
$this->_types = CHtml::listData(ProductType::model()->findAll(), 'id', 'type');
}
Просмотр файла Snippet
<?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 ())
, где первый аргумент является строка с указанием имени поля ввода.
Что я сделал не так, и как я могу это исправить?
UPDATE
echo CHtml::dropDownList('productTypes',1, array($types));
, кажется, работает, но когда я смотрю на раскрывающемся меню в представлении, по какой-то причине, то в DropDownList а 0. По какой-то причине, это ставит параметры в OptionGroup
<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);
Вы получаете сгруппированный выпадающий список, потому что вы используете 'массив ($ типов)' вместо просто '$ types'. –