Обновления были сделаны ниже
Я пытаюсь использовать виджет Kartik-V Typeahead Basic с Yii2 Framework.
Приведенный ниже код работает для отображения необходимых данных, пользователь может выполнять поиск по названию университета, и оно появляется в списке автозаполнения.
Проблема в том, что модели нужен идентификатор университета, а не имя. Таким образом, правила таковы, что это поле может хранить только целое число и возвращает ошибку проверки, как только вы выберете один из результатов ввода.
<?= $form->field($model, 'university_id')->widget(TypeaheadBasic::classname(), [
'data' => ArrayHelper::map(University::find()->all(),'id','uni_name'),
'pluginOptions' => ['highlight' => true],
'options' => ['placeholder' => 'Filter as you type ...'],
]); ?>
Я надеюсь, что кто-то может помочь мне понять, есть ли настройка, которую нужно изменить, поэтому при сохранении удобные для пользователя данные «uni_name» заменяются обратно на uni «id».
ОБНОВЛЕНИЕ: у меня частично работает код благодаря "Insane Skull".
Новый код:
<?= $form->field($model, 'name')->widget(TypeaheadBasic::classname(), [
'data' => ArrayHelper::map(University::find()->all(),'id','uni_name'),
'pluginOptions' => ['highlight' => true],
'options' => ['placeholder' => 'Filter as you type ...', 'id' => 'testID'],
'pluginEvents' => [
'typeahead:select' => new yii\web\JsExpression("function(event, ui) { $('#testing123').val(ui.item.id); }"),
]
]); ?>
<?= Html::activeHiddenInput($model, 'university_id', array ('id' => 'testing123'))?>
Теперь я, к сожалению, получаю сообщение об ошибке: Метод yii\web\JsExpression::__toString() должен возвращать строковое значение