Как в dropDownList() добавить пустое значение?

Имеется вот такая конструкция:

<?php echo $form->dropDownList($model, ‘type_id’, CHtml::listData(Types::model()->findAll(), ‘id’, ‘name’)); ?>

Она генерит дропдаунлист из всех значений, но надо добавить пустое значение по умолчанию

Как это сделать правильно?





echo $form->dropDownList($model, 'type_id', array_merge(array('0' => 'пустое значение'), CHtml::listData(Types::model()->findAll(), 'id', 'name')));




Как-то сложнова-то

Вот нашёл другой способ, более кошерный




<?php echo $form->dropDownList($model, 'type_id', CHtml::listData(Types::model()->findAll(), 'id', 'name'), array('empty'=>'All Types')); ?>



Есть ещё другие варианты сделать Дропдаунлист малой кровью?

ух ты, надо документацию внимательней читать )

:) есть еще способ, довольно грязный:


<?php echo $form->dropDownList($model, 'type_id', array(''=>'--all--')+CHtml::listData(Types::model()->findAll(), 'id', 'name')); ?>

А чем вам не нравится текущий вариант с "empty"? По-моему, уменьшать код уже некуда, если только не "обёртывать" его в другой метод для более красивого кода в представлении.

Делать вывод из модели в представлении это глупо… лучше "Types::model()->findAll()" в контроллере занести в переменную и передать в представление…

Твой вариант тоже хорошо, т.к. при использовании array(‘empty’=>’ Выберите производителя’) получим значение поля будет пустым, а при слиянии массива получим нуль, что может быть кстати при некоторой логике приложения.

я так делаю




echo $form->dropDownList($model,'status',array(""=>"") + Order::getStatuses());



именно array(""=>"") + …

Если так делать, то при multiple=>true первое значение будет всегда выбрано (selected). Лучше использовать ‘empty’=>true




$form->dropDownList($model, 'entity_id', CHtml::listData(Entity::model()->findAll(), 'id', 'name'), array('empty' => 'Please select'));



Подскажите пожалуйста, как правильно это сделать для Yii 2.x?

Обязательно ли в БД (MySQL, InnoDB) поле должно быть по умолчанию NULL?

Как решение, в форме:


<?= $form->field($model, 'key_page_category')

    ->dropDownList(ArrayHelper::map(Category::find()->all(), 'category_id', 'category_name'),

    array('prompt'=>'Без категории') )

?>

Чтобы по умолчанию был 0, а не NULL, добавила в модель:




public function rules()

{

	return [

		....

		['key_page_category', 'default', 'value' => 0]

	];

}



Не буду дублировать, просто оставлю здесь