Как сделать выпадающий список в yii2?

Как сделать dropdown yii2 в yii2 с использованием activeform и модели? Поскольку все методы изменились в yii2 , как это делается в новом?

Это похоже на

 <?php use yii\helpers\ArrayHelper; use backend\models\Standard; ?> <?= Html::activeDropDownList($model, 's_id', ArrayHelper::map(Standard::find()->all(), 's_id', 'name')) ?> 

ArrayHelper в Yii2 заменяет данные списка CHtml в Yii 1.1. [Пожалуйста, загрузите данные массива с вашего контроллера]

РЕДАКТИРОВАТЬ

Загружайте данные с вашего контроллера.

контроллер

 $items = ArrayHelper::map(Standard::find()->all(), 's_id', 'name'); ... return $this->render('your_view',['model'=>$model, 'items'=>$items]); 

Ввиду

 <?= Html::activeDropDownList($model, 's_id',$items) ?> 

Кажется, вы уже нашли свой ответ, но, так как вы упомянули активную форму, я буду способствовать еще одному, даже если она будет немного отличаться.

 <?php $form = ActiveForm::begin(); echo $form->field($model, 'attribute') ->dropDownList( $items, // Flat array ('id'=>'label') ['prompt'=>''] // options ); ActiveForm::end(); ?> 

Есть несколько хороших решений выше, а мой – всего лишь комбинация из двух (я пришел сюда, чтобы найти решение).

Решение @Sarvar Nishonboyev является хорошим, потому что оно поддерживает создание метки ввода формы и справочного блока для сообщений об ошибках.

Я пошел с:

 <?php use yii\helpers\ArrayHelper; use app\models\Product; ?> <?= $form->field($model, 'parent_id') ->dropDownList( ArrayHelper::map(Product::find()->asArray()->all(), 'parent_id', 'name') ) ?> 

Опять же, полный кредит: @Sarvar Nishonboyev's и @ippi

Кажется, есть много хороших ответов на этот вопрос. Поэтому я попытаюсь дать подробный ответ

активная форма и жестко закодированные данные

 <?php echo $form->field($model, 'name')->dropDownList(['1' => 'Yes', '0' => 'No'],['prompt'=>'Select Option']); ?> 

или

 <?php $a= ['1' => 'Yes', '0' => 'No']; echo $form->field($model, 'name')->dropDownList($a,['prompt'=>'Select Option']); ?> 

активная форма и данные из таблицы db

мы будем использовать ArrayHelper, поэтому сначала добавим его в пространство имен

 <?php use yii\helpers\ArrayHelper; ?> 

ArrayHelper использует множество функций, которые могут быть использованы для обработки массивов. Map () – это тот, который мы собираемся использовать здесь, эту функцию, чтобы сделать карту (пар ключ-значение) из многомерного массива или массива объектов.

 <?php echo $form->field($model, 'name')->dropDownList(ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']); ?> 

не является частью активной формы

 <?php echo Html::activeDropDownList($model, 'filed_name',['1' => 'Yes', '0' => 'No']) ; ?> 

или

 <?php $a= ['1' => 'Yes', '0' => 'No']; echo Html::activeDropDownList($model, 'filed_name',$a) ; ?> 

не активная форма, а данные из таблицы db

 <?php echo Html::activeDropDownList($model, 'filed_name',ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']); ?> 

Посмотрите это:

 use yii\helpers\ArrayHelper; // load classes use app\models\Course; ..... $dataList=ArrayHelper::map(Course::find()->asArray()->all(), 'id', 'name'); <?=$form->field($model, 'center_id')->dropDownList($dataList, ['prompt'=>'-Choose a Course-']) ?> 

Возможно, я ошибаюсь, но я думаю, что SQL-запрос из представления – плохая идея

Это мой путь

В контроллере

 $model = new SomeModel(); $items=ArrayHelper::map(TableName::find()->all(),'id','name'); return $this->render('view',['model'=>$model, 'items'=>$items]) 

И в представлении

 <?= Html::activeDropDownList($model, 'item_id',$items) ?> 

Или используя ActiveForm

 <?php $form = ActiveForm::begin(); ?> <?= $form->field($model, 'item_id')->dropDownList($items) ?> <?php ActiveForm::end(); ?> 
 <?= $form->field($model, 'attribute_name')->dropDownList( ArrayHelper::map(Table_name::find()->all(),'id','field_name'), ['prompt' => 'Select'] ) ?> 

Это поможет вам … Не забудьте использовать файл класса в заголовке.

В ActiveForm просто используйте:

 <?= $form->field($model, 'state_id') ->dropDownList(['prompt' => '---- Select State ----']) ->label('State') ?> 

Речь идет о генерации данных, и поэтому более корректно делается из модели. Представьте, если вы когда-либо хотели изменить способ отображения данных в раскрывающемся списке, скажите, добавьте фамилию или что-то еще. Вам нужно будет найти каждый раскрывающийся arrayHelper и изменить arrayHelper . Я использую функцию в своих моделях, чтобы возвращать данные для выпадающего списка, поэтому мне не нужно повторять код в представлениях. Это также имеет то преимущество, что я могу указать здесь фильтр и применить их к каждому раскрывающемуся списку, созданному из этой модели;

 /* Model Standard.php */ public function getDropdown(){ return ArrayHelper::map(self::find()->all(), 's_id', 'name')); } 

Вы можете использовать это в своем файле вида следующим образом;

 echo $form->field($model, 'attribute') ->dropDownList( $model->dropDown ); 

Если вы дошли до нижней части списка. Сохраните некоторый php-код и просто верните все из БД, как вам нужно:

  $items = Standard::find()->select(['name'])->indexBy('s_id')->column(); 

Следующее также можно сделать. Если вы хотите добавить значок предварительного просмотра. Это будет полезно.

 <?php $form = ActiveForm::begin(); echo $form->field($model, 'field')->begin(); echo Html::activeLabel($model, 'field', ["class"=>"control-label col-md-4"]); ?> <div class="col-md-5"> <?php echo Html::activeDropDownList($model, 'field', $array_list, ['class'=>'form-control']); ?> <p><i><small>Please select field</small></i>.</p> <?php echo Html::error($model, 'field', ['class'=>'help-block']); ?> </div> <?php echo $form->field($model, 'field')->end(); ActiveForm::end();?>