Задать вопрос

Как сделать dependent dropdown Yii2 (Yii2 DepDrown)?

Не могли бы вы помочь со скриптом?
Делаю связанный список стран, городов , с помощью
DepDrop .
Вроде все разжевано, но врубиться не могу никак. Необходимо сделать зависимость.
В модели прописаны методы :
public function getCountryList() { // could be a static func as well
        $models = \common\models\Country::find()->asArray()->all();
        return ArrayHelper::map($models, 'id', 'name_ru');
    }
и
public function getCityList() { // could be a static func as well
        $models = \common\models\City::find()->asArray()->all();
        return ArrayHelper::map($models, 'id', 'name_ru','country_id');
       }

Во view вывожу обычным страны:
<?= $form->field($model, 'country')->dropDownList($model->CountryList, ['id'=>'cat-id']) ?>


В следующем поле надо уже с помощью DepDrop:
<?= $form->field($model, 'city')->widget(DepDrop::classname(), [
    'options'=>['id'=>'subcat-id'],
    'pluginOptions'=>[
        'depends'=>['cat-id'],
        'placeholder'=>'Select...',
        'url'=>Url::to(['/site/subcat'])
    ]
]);


Так же присутствует контроллер:
public function actionCity() {
    $out = [];
    if (isset($_POST['depdrop_parents'])) {
        $parents = $_POST['depdrop_parents'];
        if ($parents != null) {
            $cat_id = $parents[0];
            $out = self::getCityList($cat_id); 
            // the getSubCatList function will query the database based on the
            // cat_id and return an array like below:
            // [
            //    ['id'=>'<sub-cat-id-1>', 'name'=>'<sub-cat-name1>'],
            //    ['id'=>'<sub-cat_id_2>', 'name'=>'<sub-cat-name2>']
            // ]
            echo Json::encode(['output'=>$out, 'selected'=>'']);
            return;
        }
    }
    echo Json::encode(['output'=>'', 'selected'=>'']);
}


Вот и не пойму, что куда пихать. 'cat-id', понятно, зависимость, по сути country_id и дальше ступор. Помогите объяснить, пожалуйста
  • Вопрос задан
  • 14460 просмотров
Подписаться 5 Оценить Комментировать
Решения вопроса 1
public function getCityList($cat_id) { // could be a static func as well
        $models = \common\models\City::find()->where(['country_id' => $cat_id])->asArray()->all();
        return ArrayHelper::map($models, 'id', 'name_ru','country_id');
       }

видимо так
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
видео урок на эту тему
yii-02.blogspot.com/2015/01/yii2-lesson-20-depende...
Ответ написан
Комментировать
@slip31 Автор вопроса
Так, а как сделать dropDown без стороннего виджета на Yii2?
Для yii1 примеры есть, а вот для yii2 нет. Если иметь просто две таблицы 'id','name' и 'id','parent_id','id'.
Для yii1 есть Этот пример , но в лоб его не переписать
Ответ написан
Ваш ответ на вопрос

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

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