Как запустить DepDrop kartik yii2 scenario 3?

Для того чтобы запустить DepDrop сценарий 3 в Yii2, вы должны выполнить несколько шагов.

1. Установка пакета
Вам необходимо установить расширение kartikdepdrop используя composer. Откройте командную строку и выполните следующую команду:

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

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

'components' => [
    ...
    'assetManager' => [
        'bundles' => [
            'kartikdepdropDepDropAsset' => [
                'depends' => [
                    'yiiwebYiiAsset',
                    'kartikwidgetsSelect2Asset',
                ],
            ],
        ],
    ],
    ...
],

3. Настройка модели
Далее вам нужно настроить модель, для которой вы будете использовать DepDrop. Вам нужно открыть файл модели и добавить следующий код:

use kartikdepdropDepDrop;
use yiihelpersUrl;

...

public function rules()
{
    return [
        ...
        ['sub_category_id', 'required'],
        ['sub_category_id', 'integer'],
        ...
    ];
}

public function init()
{
    $this->on(self::EVENT_INIT, function () {
        $this->on(self::EVENT_AFTER_VALIDATE, function ($event) {
            $this->sub_category_id = null;
        });
    });

    parent::init();
}

public function afterFind()
{
    parent::afterFind();

    $this->on(self::EVENT_AFTER_VALIDATE, function ($event) {
        if ($this->category_id) {
            $this->scenario = DepDrop::SCENARIO_INIT;
        }

        $this->depdropData = [
            'sub_category_id' => [
                'options' => $this->dependentOptions('sub_category_id'),
                'pluginOptions' => $this->dependentPluginOptions('sub_category_id'),
                'pluginEvents' => $this->dependentPluginEvents('sub_category_id'),
            ],
        ];
    });
}

4. Настройка контроллера
Затем вы должны настроить контроллер, в котором вы будете использовать DepDrop. Вам нужно открыть файл контроллера и добавить следующий код:

use kartikdepdropDepDropAction;

...

public function actions()
{
    return [
        ...
        'sub-categories' => [
            'class' => DepDropAction::className(),
            'outputCallback' => [$this, 'formatOutput'],
        ],
        ...
    ];
}

public function formatOutput($selectedId, $parentType, $params)
{
    // Здесь вы должны вернуть данные для списка зависимых элементов DepDrop
    // на основе выбранного значения и информации о родительском элементе

    $output = [];

    if ($selectedId) {
        // Загрузить данные для списка зависимых элементов на основе выбранного значения
        $subCategories = SubCategory::find()
            ->where(['category_id' => $selectedId])
            ->all();

        foreach ($subCategories as $subCategory) {
            $output[] = [
                'id' => $subCategory->id,
                'name' => $subCategory->name,
            ];
        }
    }

    return ['output' => $output, 'selected' => ''];
}

5. Настройка представления
В конце вам нужно настроить представление, в котором вы будете использовать DepDrop. Вам нужно открыть файл представления и добавить следующий код:

use kartikdepdropDepDrop;

...

<?= $form->field($model, 'category_id')->dropDownList($categories, [
    'prompt' => 'Выберите категорию',
    'id' => 'category',
]) ?>

<?= $form->field($model, 'sub_category_id')->widget(DepDrop::classname(), [
    'type' => DepDrop::TYPE_SELECT2,
    'options' => ['id' => 'sub-category'],
    'pluginOptions' => [
        'depends' => ['category'],
        'placeholder' => 'Выберите подкатегорию',
        'url' => Url::to(['controller/sub-categories']),
        'loadingText' => 'Загрузка ...',
        'initialize' => true,
        'initDepends' => ['category'],
        'initValue' => $model->sub_category_id,
    ],
])->label('Подкатегория'); ?>

Обратите внимание, что в коде указано, что текущий сценарий - DepDrop::SCENARIO_INIT. Это означает, что при загрузке формы и выборе родительского элемента, список зависимых элементов будет автоматически обновлен в соответствии с данными из базы данных.

Надеюсь, эти подробные шаги помогут вам настроить и использовать DepDrop сценарий 3 в вашем приложении Yii2.