Я решил воспользоваться виджетом
kartik typeahead и столкнулся с некоторыми сложностями:
1.) В инструкции указано что подключение виджета выполняется именно так -
use kartik\widgets\Typeahead;
, но увы при таком подключении у меня ошибка: Class 'kartik\widget\Typeahead' not found. Ну я нашел вроде бы правильное решение и сделал так:
use kartik\typeahead\Typeahead;
2.) Ну вот собственно сама проблема в их примере указано что нужно подготавливать массив таким образом -
[['value' => 'data1'], ['value' => 'data2'],...]
и передавать его джисоном. Но так у меня не чего не вышло. Я попробовал по другому и что то вышло, но увы не до конца работает. Вот мой код:
Контроллер:
public function actionCreate()
{
$model = new Manufacturer();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
} else {
foreach (Country::find()->each() as $country) {
$countries[$country->id] = $country->name;
}
return $this->render('create', [
'model' => $model,
'countries' => $countries,
]);
}
}
Вьюха действия создания:
<?php
use yii\helpers\Html;
/* @var $this yii\web\View */
/* @var $model app\modules\registry\models\Manufacturer */
$this->title = 'Create Manufacturer';
$this->params['breadcrumbs'][] = ['label' => 'Manufacturers', 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="manufacturer-create">
<h1><?= Html::encode($this->title) ?></h1>
<?= $this->render('_form', [
'model' => $model,
'countries' => $countries,
]) ?>
</div>
И форма:
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use kartik\typeahead\Typeahead;
/* @var $this yii\web\View */
/* @var $model app\modules\registry\models\Manufacturer */
/* @var $form yii\widgets\ActiveForm */
?>
<div class="manufacturer-form">
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'name')->textInput(['maxlength' => 255]) ?>
<?= $form->field($model, 'country_id')->widget(Typeahead::classname(), [
'options' => ['placeholder' => 'Filter as you type ...'],
'pluginOptions' => ['highlight'=>true],
'dataset' => [
[
'local' => $countries,
'limit' => 10
]
]
]); ?>
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
Как вы заметили я не отправляю данные джсоном так как если джон то вообще не чего не рабит, а сейчас у меня хотя бы при вводе в инпут текст ищется, но увы передает он не id, а name. Так в чем моя ошибка?