Есть крутой плагин Select2 и его реализация для Yii2 от kartik-v
Случилось тут, что данных оказалось крайне много, поэтому загружать их прямо в плагин не представляется возможным. А значит загружать их нужно динамически.
Для этого создаем экшен
$form->field($model, 'fruit')->widget(
\kartik\select2\Select2::class,
[
'data' => \app\models\Fruit::getFruits(), //данные при инициализации, в том числе и если в модели уже есть данные для этого поля в формате: [key=>value]
'options' => [
'prompt' => 'Выберите фрукт',
'id' => 'placement-id',
],
'pluginOptions'=>[
'minimumInputLength'=>3,
'ajax'=>[
'url'=>\yii\helpers\Url::to(['/fruit/fruit']),
'dataType'=>'json',
'delay'=>250,
'cache'=>true,
]
],
]
Тут все просто, но особенность здесь в получаемых данных, а именно то, как их подготовить.
Здесь указан формат данных: https://select2.org/data-sources/formats, поэтому с учетом формата экшен fruit должен возвращать массив [‘results’ => [ [‘id’=>1, ‘text’=>’Apple’], [‘id’=>2, ‘text’=>’Orange’] ] ] в формате Json.
Более подробно про то, какие параметры есть можно почитать тут: https://select2.org/data-sources/ajax
и быстрый взгляд можно поглядеть тут: https://stackoverflow.com/questions/46661166/how-to-use-widget-kartik-select2-with-ajax-templates-in-yii2