Yii2: Почему виджет kartik \ select2 не заполнен, тогда я пытаюсь обновить модель? - PullRequest
0 голосов
/ 17 марта 2019

У меня есть модель ActiveRecord и вид для формы обновления этой модели. Также у меня есть геттер и сеттер в классе модели, который выглядит следующим образом

public function setTopvisorGoogleRegion($value)
{
    $this->myvalue = $value;
    return(true);
}

public function getTopvisorGoogleRegion()
{
    return([1 => '123']); //I return this array for show you essence of the problem
}

Следуя логике в этом коде, $ model-> topvisorgoogleregion должен вернуть [1 => '123']

В виду у меня есть следующий код

<?php echo($form->field($model, topvisorgoogleregion)->textInput());?>
<?php echo $form->field($model, 'topvisorgoogleregion')->widget(Select2::classname(), [
    'data' =>  [1 => '123', 2 => '456'],
    'options' => [
        'id'=>'projectCtrl',
        'placeholder' => 'Select option',
        'multiple' => true
    ],
    'pluginOptions' => [
        'allowClear' => true,
        'tags' => true, 
    ],

]);
?>

Когда я открываю форму, я хочу видеть вариант 1 => «123», уже выбранный в Select2. Это логично, потому что, когда уже существующая запись обновляется, ActiveRecord получает данные, которые уже сохранены в модели (в данном случае, с использованием getter), и заполняет поля с учетом этих данных (в первом поле, которое использует textInput, я вижу текст «Array», потому что getter в модели возвращает массив). Но Select2 пуст, когда я открываю страницу обновления. Что не так?

Если я удаляю первое поле (textInput), ничего не меняется

1 Ответ

0 голосов
/ 19 марта 2019

Я нахожу решение - в геттере мне нужно предоставить объект ActiveQuery, а не массив. Я не знаю, почему и как это работает, но это работает

...