yii2 select2 by kartik-v установить значение по умолчанию

У меня вопрос о yii2 kartik-v widget select 2.

виджет прикреплен к полю в моем представлении

<?= $form->field($model, 'address')->widget(Select2::className(), [ 'options' => ['placeholder' => 'Inserta an address '], 'pluginOptions' => [ 'allowClear' => true, 'minimumInputLength' => 3, 'ajax' => [ 'url' => Url::to(['register/addresses']), 'dataType' => 'json', 'data' => new JsExpression('function(params) { return {q:params.term}; }') ], 'escapeMarkup' => new JsExpression('function (markup) { return markup; }'), 'templateResult' => new JsExpression('function(address) { return address.name; }'), 'templateSelection' => new JsExpression('function (address) { return address.name; }'), ], 'pluginEvents' => [ "select2:select" => "function(e) { // some function }", ], ]); ?> 

если в моем контроллере я хочу установить в это поле значение

например: $model->address = "Some Value"; на вид поле остается пустым

Что я могу сделать?

ОБНОВИТЬ!

Как говорится в документации, я могу использовать опцию: initValueText, если я использую версию этого плагина ajax. Поэтому я попытался установить 'initValueText' => $model->address, но результат тот же

Его немного поздно .. но у меня тоже была такая же проблема .. я решил это, назначив ценность

  <?= $form->field($model, 'address')->widget(Select2::className(), [ 'initValueText' => $model->address, 'value' => $model->address, 'options' => ['placeholder' => 'Inserta an address '], 'pluginOptions' => [ 'allowClear' => true, 'minimumInputLength' => 3, 'ajax' => [ 'url' => Url::to(['register/addresses']), 'dataType' => 'json', 'data' => new JsExpression('function(params) { return {q:params.term}; }') ], 'escapeMarkup' => new JsExpression('function (markup) { return markup; }'), 'templateResult' => new JsExpression('function(address) { return address.name; }'), 'templateSelection' => new JsExpression('function (address) { return address.name; }'), ], 'pluginEvents' => [ "select2:select" => "function(e) { // some function }", ], ]); ?> 

эй, у меня была такая же проблема с #ajax, ни placeholder, ни initValueText не показывали, что я сделал это

 <?php $product = $model->product_id ? Product::findOne($model->product_id)->name : 'select ....'; echo $form->field($model, 'product_id')->widget(Select2::classname(), [ 'initValueText' => $product, // set the initial display text // 'options' => ['placeholder' => 'select ....'], 'pluginOptions' => [ 'allowClear' => true, 'minimumInputLength' => 3, 'ajax' => [ 'url' => Url::to(['list']), 'dataType' => 'json', 'data' => new JsExpression('function(params) { return {q:params.term}; }') ], 'escapeMarkup' => new JsExpression('function (markup) { return markup; }'), 'templateResult' => new JsExpression('function(product_id) { return product_id.name; }'), 'templateSelection' => new JsExpression('function (product_id) { return product_id.name; }'), ], ]);?> 

если новая модель «select ….» отображается иначе имя продукта, так как «параметры» не слишком много надеются, что это будет надеяться кому-то

Проблема заключалась в следующем:

  'escapeMarkup' => new JsExpression('function (markup) { return markup; }'), 'templateResult' => new JsExpression('function(address) { return address.name; }'), 'templateSelection' => new JsExpression('function (address) { return address.name; }'), 

Похоже, что этот плагин хочет получить конкретный возврат для шаблонов templateResult 'и' templateSelection '.

Я изменил возвращаемое значение JsExpression с адресом address.text (вместо address.name) в качестве примеров: Link .

И затем я изменил также метод PHP, который возвращает результаты:

 public function actionAddresses($q = NULL, $id = NULL) { Yii::$app->response->format = Response::FORMAT_JSON; $results = array(); if (!is_null($q)) { $geocoder = new GeocodingClient(); $request = $geocoder->lookup(['address' => $q]); $counter = 1; foreach ($request['results'] as $key => $value) { $results['results'][] = [ 'id' => $counter, 'text' => $value['formatted_address'], // Instead of 'name' 'coordinate' => $value['geometry']['location'] ]; $counter++; } } return $results; } 

Надеюсь, это поможет кому-то с подобной проблемой.