myks92
@myks92
Нашёл решение — пометь вопрос ответом!

Yii как сделать зависимые select в форме?

Доброго вечера всем! Подскажите как правильно реализовать запись нескольких записей из одной формы? Либо подскажите ссылочки со связанной информацией.

У формы есть select. В зависимости от выбранных данных создаём input-ы. Получаем массив данных. Перебираем массив через foreach. Далее сохраняем как отдельные записи, если валидация прошла успешно.

Как лучше создавать инпуты? Обернуть все в Pjax или это не правильно? Массив данных будет находиться в базе данных.

Благодарю!
  • Вопрос задан
  • 2605 просмотров
Решения вопроса 1
slo_nik
@slo_nik Куратор тега Yii
Вот Вам пример из рабочего проекта, доработайте под свои требования.
<?= $form->field($model, 'country_id')->dropDownList(ArrayHelper::map(Countries::getAllName(), 'id', 'name_ru'),
                                                         [
                                                             'prompt' => 'Выбрать страну...',
                                                             'onchange' => '
                                                                $.post(
                                                                 "'.Url::toRoute('ajax/list').'",
                                                                 {id : $(this).val()},
                                                                 function(data){
                                                                     $("select#regions").html(data).attr("disabled", false)
                                                                 }
                                                                )
                                                             '
                                                         ])
    ?>

    <?= $form->field($model, 'region_id')->dropDownList(ArrayHelper::map(Regions::getAllName(), 'id', 'name_ru'),
                                                        [
                                                            'prompt' => 'Выбрать регион...',
                                                            'id' => 'regions',
                                                            'disabled' => $model->isNewRecord ? 'disabled' : false
                                                        ])
    ?>

Метод getAllName() в модели может выглядеть так:
public static function getAllName()
    {
        return self::findAll(['status' => self::STATUS_ACTIVE]);
    }

Действие в контролере может выглядеть так:
public function actionList()
    {
         if(Yii::$app->request->isAjax)
         {
             $id = (int)Yii::$app->request->post('id');

             $regions = Regions::find()
                                 ->where('status=:status',[':status' => Regions::STATUS_ACTIVE])
                                 ->andWhere('country_id=:id', [':id' => $id])
                                 ->orderBy('name_ru')
                                 ->all();

             foreach($regions as $region){
                 $this->option .= '<option value="'.$region->id.'">'.$region->name_ru.'</option>';
             }
         }
        return $this->option;
    }

Всё, у Вас два связанных выпадающих списка.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы