Зависимый dropdownlist в gridview yii2?

Для создания зависимого dropdownlist в Yii2 внутри GridView мы можем использовать расширение kartik Select2.

Первым шагом мы должны установить расширение Select2 с помощью Composer, выполнив следующую команду в терминале:

composer require kartik-v/yii2-widget-select2 "@dev"

После установки расширения, нам нужно добавить его в файл конфигурации приложения (config/web.php или config/main.php) следующим образом:

'components' => [
    // ...
    'assetManager' => [
        'bundles' => [
            'kartikselect2Select2Asset' => [
                'depends' => [
                    'yiiwebJqueryAsset',
                    'yiibootstrap4BootstrapAsset', // Зависит от вашего используемого Bootstrap
                ],
            ],
        ],
    ],
    // ...
],

Затем, мы должны изменить представление GridView, чтобы добавить столбец с зависимым dropdownlist. В следующем примере мы предполагаем, что у нас есть две связанные модели Country и City, и мы хотим показать все города в зависимости от выбранной страны:

use kartikselect2Select2;

//...
[
    'attribute' => 'country_id',
    'format' => 'raw',
    'value' => function ($model) {
        return Select2::widget([
            'name' => 'country_id',
            'data' => ArrayHelper::map(Country::find()->all(), 'id', 'name'),
            'value' => $model->country_id,
            'options' => ['placeholder' => 'Select a country...', 'id' => 'country-id'],
            'pluginOptions' => [
                'allowClear' => true,
            ],
            'pluginEvents' => [
                "change" => "function() {
                    var countryId = $(this).val();
                    $.ajax({
                        url: '" . yiihelpersUrl::to(['controller/action']) . "',
                        method: 'GET',
                        data: {country_id: countryId},
                        success: function(data) {
                            $('#city-id').html(data);
                        }
                    });
                }",
            ],
        ]);
    },
],
[
    'attribute' => 'city_id',
    'format' => 'raw',
    'value' => function ($model) {
        return Html::tag('span', '', [
            'id' => 'city-id',
            'data-selected' => $model->city_id,
        ]);
    },
],
//...

Здесь мы используем функцию Select2::widget() для создания элемента зависимого dropdownlist внутри ячейки GridView. Мы передаем ему данные, которые необходимо отобразить (список стран) и значение выбранного элемента (идентификатор страны). Мы также добавляем произвольный id к элементу страны для дальнейшего использования в JavaScript-коде.

Затем мы настраиваем обработчик события change с помощью pluginEvents. При выборе новой страны мы выполняем AJAX-запрос на сервер, чтобы получить список городов для выбранной страны. Возвращаемые данные отображаем в элементе города, который также имеет свой id.

Здесь вы должны заменить 'controller/action' на свой реальный URL-адрес, где реализовано получение списка городов для выбранной страны (метод должен быть прописан в вашем контроллере).

В итоге, при выборе страны в dropdownlist будет сработан AJAX-запрос на сервер, в результате которого будет обновлен dropdownlist с городами в зависимости от выбранной страны.

Надеюсь, это подробное объяснение поможет вам создать зависимый dropdownlist в GridView в Yii2. Если у вас есть еще вопросы, не стесняйтесь задавать!