Задать вопрос

Как сделать сабмит формы и автообновление ListView?

Здравствуйте. Понимаю, что тема довольно заезженная, но после дня проб ничего не получилось. Суть такая: есть виджет, в нем форма для добавления комментария и лист вью
<?
$form = ActiveForm::begin(['id' => 'form-feedback',
                           'enableAjaxValidation' => true,
                           'action' => '/feedback/index'
                            ]);?>
?>

<?= $form->field($model, 'name')->textInput(['value' => !Yii::$app->user->isGuest ? Yii::$app->user->identity->username : '']) ?>

<?= $form->field($model, 'email')->textInput(['type' => 'email', 'value' => !Yii::$app->user->isGuest ? Yii::$app->user->identity->email : ''])?>

<?= $form->field($model, 'comments')->textarea(['rows' => 5]) ?>

<?= $form->field($model, 'id_obj')->textInput(['type' => 'hidden', 'value' => $id_obj])->label(false)?>

<?= $form->field($model, 'type')->textInput(['type' => 'hidden', 'value' => $type])->label(false)?>

<div class="form-group">
    <?= Html::submitButton('<span>Отправить</span>', ['class' => 'btn btn-primary reg-btn', 'name' => 'signup-button']) ?>
</div>

<?php ActiveForm::end(); ?>


<?= ListView::widget([
    'dataProvider' => $dataProvider,
    'itemView' => '_list',
    'layout' => "{summary}\n{items}\n{pager}",
    'summary' => '',
    'itemOptions' => [
        'tag' => 'div',
        'class' => 'feedback',
    ],
]);
?>


контроллер, который обрабатывает данные
public function actionIndex(){

        $model = new Feedback;
        
        if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
            Yii::$app->response->format = Response::FORMAT_JSON;
            return ActiveForm::validate($model);
        }

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
                    return Yii::$app->getResponse()->redirect(['/']);

        }
    }


Задача такова, что нужно при сабмите формы делать валидацию, сохранять данные и сразу обновлять лист вью без перезагрузки.
Много разных способов пробовал, но получаю ошибки в консоли, одна из них ошибка pjax Aborted.
Заранее благодарю за помощь.
  • Вопрос задан
  • 225 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@oleglysenko Автор вопроса
<?php
Pjax::begin(['id'=>'pjax-container-form']);
$form = ActiveForm::begin(['id' => 'form-feedback',
                           'enableAjaxValidation' => true,
                           'action' => '/feedback/index',
                           'options' => ['data-pjax' => true]
                            ]);?>

<?= $form->field($model, 'name')->textInput(['value' => !Yii::$app->user->isGuest ? Yii::$app->user->identity->username : '']) ?>

<?= $form->field($model, 'email')->textInput(['type' => 'email', 'value' => !Yii::$app->user->isGuest ? Yii::$app->user->identity->email : ''])?>

<?= $form->field($model, 'comments')->textarea(['rows' => 5]) ?>

<?= $form->field($model, 'id_obj')->textInput(['type' => 'hidden', 'value' => $id_obj])->label(false)?>

<?= $form->field($model, 'type')->textInput(['type' => 'hidden', 'value' => $type])->label(false)?>

<div class="form-group">
    <?= Html::submitButton('<span>Отправить</span>', ['class' => 'btn btn-primary reg-btn', 'name' => 'signup-button']) ?>
</div>

<?php ActiveForm::end(); ?>
<?php Pjax::end(); ?>


<?Pjax::begin(['id'=>'pjax-container-comments']);?>
<?= ListView::widget([
    'dataProvider' => $dataProvider,
    'itemView' => '_list',
    'layout' => "{summary}\n{items}\n{pager}",
    'summary' => '',
    'itemOptions' => [
        'tag' => 'div',
        'class' => 'feedback',
    ],
]);
?>

<? Pjax::end();?>
<?php
$this->registerJs('
            $("#pjax-container-form").on("pjax:end", function() {
                var url = "' . Url::toRoute(['/feedback/index']) . '";
                $.pjax({url: url, container: "#pjax-container-comments"});
            })');
?>
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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