yii2 select2 por kartik-v establece el valor predeterminado

Tengo una pregunta sobre el widget yii2 kartik-v seleccione 2.

el widget está adjunto a un campo en mi opinión

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 }", ], ]); ?> 

si en mi controlador quiero establecer un valor en este campo

como: $model->address = "Some Value"; en la vista, el campo permanece en blanco

¿que puedo hacer?

¡ACTUALIZAR!

Como la documentación dice que puedo usar la opción: ‘initValueText’ si uso la versión ajax de este complemento. Así que traté de establecer 'initValueText' => $model->address, pero el resultado es el mismo

Es un poco tarde … pero yo también tuve el mismo problema … lo resolví asignando valor

  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 }", ], ]); ?> 

hey tuve el mismo problema con #ajax ni placeholder ni initValueText estaban mostrando lo que hice fue esto

 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; }'), ], ]);?> 

si el modelo es nuevo, seleccione ‘seleccionar ….’, de lo contrario, el nombre del producto, dado que “opciones” no está haciendo demasiado, o bien, espero que esto sea esperanzador para alguien.

El problema fue este:

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

Parece que este complemento quiere un rendimiento específico para las claves ‘templateResult’ y ‘templateSelection’.

Modifiqué el valor de retorno de JsExpression con address.text (en lugar de adress.name) como ejemplos de la guía: Link .

Y luego he modificado también el método PHP que devuelve los resultados:

 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; } 

Espero que esto pueda ayudar a alguien con un problema similar.