Как сделать dropdown
в yii2
использовании activeform
и модели? Поскольку все методы изменились yii2
, как это сделать в новом?
php
drop-down-menu
yii2
Dency GB
источник
источник
Ответы:
Это как
<?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(); ?>
источник
.on('change')
событием в jquery для заполнения второго поля на основе выбора первого.Выше есть несколько хороших решений, а мое - просто комбинация двух (я пришел сюда в поисках решения).
Решение @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 и @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']); ?>
активная форма и данные из таблицы БД
мы собираемся использовать 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) ; ?>
не активная форма, а данные из таблицы БД
<?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(); ?>
источник
$this->view->params['items'] = $items;
и на моей странице просмотра<?php echo $form->field($model, 'plan_type', ['options' => ['class' => ' input select']])->dropdownList( $this->params['items'],['prompt'=>'Select Plan','class' => 'selectpicker', 'data-live-search' => 'true','label'=>false]);?>
<?= $form->field($model, 'attribute_name')->dropDownList( ArrayHelper::map(Table_name::find()->all(),'id','field_name'), ['prompt' => 'Select'] ) ?>
Это поможет вам ... Не забудьте использовать файл класса в заголовке.
источник
use yii\helpers\ArrayHelper;
Чтобы использовать помощник , необходимо написать поверх файла представления .В
ActiveForm
просто использовать:<?= $form->field($model, 'state_id') ->dropDownList(['prompt' => '---- Select State ----']) ->label('State') ?>
источник
Речь идет о генерации данных, и это правильнее делать на основе модели. Представьте, что вы когда-нибудь хотели изменить способ отображения данных в раскрывающемся списке, скажем, добавить фамилию или что-то в этом роде. Вам нужно будет найти все раскрывающиеся списки и изменить
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();
источник
Html :: activeDropDownList ($ model, 'id', ArrayHelper :: map (AttendanceLabel :: find () -> all (), 'id', 'label_name'), ['prompt' => 'Статус посещаемости']) ;
источник
Также можно сделать следующее. Если вы хотите добавить значок добавления. Это будет полезно.
<?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();?>
источник