(Решено) Программно изменить значение Yii2 ActiveForm / Widget Input - PullRequest
1 голос
/ 31 марта 2020

Я хочу программно установить значение виджета ввода формы в yii2, но я не могу найти никого другого, пытающегося сделать то же самое. Значение по умолчанию также будет работать для меня. У меня есть идентификатор, поэтому, если есть способ сказать $modalForm->contact_id = $my_value; и заставить его получить остальные данные из модели, это будет именно то, что я ищу.

Цель этого автоматически заполняет форму данными, которые пользователь уже ввел где-то еще.

Вот начало ActiveForm:

<?php $modalForm = ActiveForm::begin([
        'id' => $addProjectParticipantModelModal->formName(),
        'action' => Yii::$app->urlManager->createUrl(['url-something-ajax']),
    ]); ?>

А вот (одно из) полей ввода, которые я хочу программно присваивают значение:

echo Form::widget([
    'model'=>$addProjectParticipantModelModal,
    'form'=>$modalForm,
    'columns'=>1,
    'attributes'=>[
        'contact_id'=>[
            'type'=>Form::INPUT_WIDGET,
            'widgetClass' => '\kartik\widgets\Select2',
            'label' => 'Contact Name',
            'options'=>[
                'pluginOptions' => [
                    'label' => 'Contact Name',
                    'allowClear' => true,
                    'minimumInputLength' => 2,
                    'ajax' => [
                        'url' => $contactsUrl,
                        'dataType' => 'json',
                        'data' => new JsExpression('function(params) { return {q:params.term}; }'),
                    ],
                    'placeholder'=>'Pick a contact...',
                    'maxlength' => 60,
                    'id' => 'newParticipantWidget',
                    'escapeMarkup' => new JsExpression('function (markup) { return markup; }'),
                    'templateResult' => new JsExpression('function(contact_id) { return contact_id.text; }'),
                    'templateSelection' => new JsExpression('function (contact_id) { return contact_id.text; }'),
                ],
            ],
        ],
    ],
]);

И вот что я пытаюсь заставить работать:

if (isset(Yii::$app->session["isReturningAfterContactId"]) && Yii::$app->session["isReturningAfterContactId"] != "") {
    $modalForm->contact_id->$value = Yii::$app->session["isReturningAfterContactId"];
}

Если я загляну в мой Chrome DevTools в элементах на странице я вижу, что когда я что-то выбираю, всплывает новый элемент, похожий на <option value="an-id-just-like-the-one-i-want-to-insert" data-select="123">Name of contact</option>, но я не знаю, как go об этом, если его нет даже в DOM раньше вы что-то выбираете вручную.

У кого-нибудь есть предложения?

Редактировать: Вот решение, использующее тип ввода Select2 & jquery:

const defaultOption = new Option(name, id, true, true);
$("#IdOfSelect2Component").append(defaultValue).trigger("change");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...