yii2 select2 by kartik-v 设置默认值

gio*_*vaZ 6 php yii2

我有一个关于 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

                }",
    ],
]);
?>
Run Code Online (Sandbox Code Playgroud)

如果在我的控制器中我想为此字段设置一个值

就像:$model->address = "Some Value";在视图上该字段保持空白

我能做些什么?

更新!

正如文档所说,如果我使用此插件的 ajax 版本,我可以使用选项:'initValueText'。所以我尝试设置'initValueText' => $model->address,但结果是一样的

gio*_*vaZ 1

问题是这样的:

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

看来这个插件想要键“templateResult”和“templateSelection”的特定返回。

我已经使用 address.text (而不是 adress.name)修改了 JsExpression 返回值作为指导示例: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;
}
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮助有类似问题的人。