Як зробити dropdown
in yii2
за допомогою an activeform
і моделі? Оскільки всі методи змінилися в yii2
, як це робиться в новому?
Як зробити dropdown
in yii2
за допомогою an 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();
?>
.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'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(); ?>
$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();?>