Есть крутой плагин 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