Я хочу программно установить значение виджета ввода формы в 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");