@JustFool

В чем я ошибся?

Я решил воспользоваться виджетом 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. Так в чем моя ошибка?
  • Вопрос задан
  • 656 просмотров
Решения вопроса 1
@Centrino
Ну у вас в коде $form->field($model, 'name') и возвращает он name, а где у вас вывод в форму id?

Я не знаю, какая у вас IDE, но в первую очередь рекомендую дебажить! Что передается на вывод, в каком формате, что вы передаете на ваш виджет.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
sanchezzzhak
@sanchezzzhak
Ля ля ля...
Даже можно без дебагера понять что передается через консоль разработчика в браузере F12.

XDebug есть плагин для хрома очень удобно использовать
Вот ссылка https://chrome.google.com/webstore/detail/xdebug-h...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы