Как использовать множественный выбор на виджете yii kartik select2 и ajax - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь использовать виджет Kartik Select2 для моего проекта Yii2. Я воспользуюсь поиском Ajax Loading and everithing works, но если я установлю опцию множественного выбора, это выдаст мне эту ошибку.

Предупреждение PHP - yii \ base \ ErrorException array_combine (): оба параметра должно иметь равное количество элементов

Эта ошибка в Select2.php в этой строке

 $this->data = $multiple ? array_combine((array)$key, (array)$val) : [$key => $val];

Я думаю, это потому, что атрибут данных отсутствует, но если я добавлю атрибут данных, ajax не будет работать правильно.

Это мой взгляд:

$form->field($model, 'lista_art')->widget(Select2::classname(), [
    'initValueText' => "", // set the initial display text
    //'data' => '',
    'options' => ['placeholder' => 'Select a color ...',
                  //'multiple' =>true, // error here
                 ],
    'pluginOptions' => [
        'tags' => true,
        'tokenSeparators' => [',', ' '],
        'allowClear' => true,
        'minimumInputLength' => 3,
        'language' => [
            'errorLoading' => new JsExpression("function () { return 'Waiting for results...'; }"),
        ],
        'ajax' => [
            'url' => \yii\helpers\Url::to(['lista-articoli']),
            'dataType' => 'json',
            'data' => new JsExpression('function(params) { return {q:params.term}; }')
        ],
        'escapeMarkup' => new JsExpression('function (markup) { console.log(markup);return markup; }'),
        'templateResult' => new JsExpression('function(lista_art) { return lista_art.art_modello; }'),
        'templateSelection' => new JsExpression('function (lista_art) { return lista_art.art_modello; }'),
    ],
]);

Также пытался вставить несколько опций в массив 'pluginOptions', но не работает. Можно ли использовать несколько опций с Ajax Loading?

P.s. Я проверил свою панель инструментов разработчика, и ответ правильный, и дает мне то, что я ожидал.

1 Ответ

0 голосов
/ 13 сентября 2018

Вы забыли установить данные атрибут

Пример использования kartik select 2 с моделью и активной формой

$model->keywords = [1, 2];  // NOTE THIS IS AN ARRAY of keys
$form->field($model, 'keywords')->widget(Select2::className(), [
    'pluginOptions' => [
        'tags' => true,
       'multiple' =>true, 
    ],
     'data' => [1=>'keyword1', 2=>'keyword2', 3=>'keyword3'],  
])

Обновление Попробуйте настроить данные как пустой массив, как 'data' => []

...