Yii — заполнение выпадающего списка

Я хочу получить список productTypes из базы данных и вывести их в раскрывающийся список, который затем будет использоваться для ajax заполнения второго раскрывающегося списка.

Шаг 1. Контроллер получает productTypes из базы данных. Шаг 2. Контроллер преобразует объект 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);

person Gravy    schedule 08.05.2013    source источник
comment
Вы получаете сгруппированное раскрывающееся меню, потому что используете array($types) вместо $types.   -  person Michael Härtl    schedule 08.05.2013


Ответы (1)


Похоже, что $form является объектом класса CActiveForm. Эта версия метода dropDownList принимает экземпляр класса CModel.

См. сигнатуру метода здесь CActiveForm::dropDownList

Использовать

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

вместо

echo $form->dropDownList('productTypes',1, array($types));
person verisimilitude    schedule 08.05.2013