Задать вопрос
@phoenix_tf
Make IT

Yii2 Pjax — как форму в контейнере отправить на один action, а обновить контент с другого?

Пытаюсь сделать лаконично и просто, встроенными средствами.
Есть такая форма
5bbcbda025a3f009121145.png
Должен отправиться коммент на свой контроллер и обновиться табличка
<?php Pjax::begin([
	'id' => 'comments-pjax',
	'enablePushState' => false,
	'formSelector' => '#comments-form'
]); ?>

<div class="box box-primary">
	<div class="box-header with-border">
		<h3 class="box-title">Комментарии</h3>
	</div>
	<div class="box-body">

		<?= GridView::widget([
			...
		]); ?>

	</div>
	<div class="box-footer">
		<?php $form = ActiveForm::begin([
			'id' => 'comments-form',
			'action' => '/lead-comments/create?lead_id='.$model->id,
		]);	$comm = new LeadComments; ?>
		<?= $form->field($comm, 'lead_id')->hiddenInput(['value' => $model->id])->label(false) ?>
		<?= $form->field($comm, 'text')->textarea() ?>
		<?= app\components\ViewHelper::saveButton(null, 'Добавить комментарий') ?>
		<?php ActiveForm::end(); ?>
	</div>
</div>

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

Проблема в том, что содержимое контейнера меняется на возврат от контроллера добавления комментария, а должен просто обновить таблицу, как при поведении pjax без формы, можно ли так настроить?
  • Вопрос задан
  • 1790 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
@myphpscript
можно вытащить форму за пределы pjax контейнера, отправлять аяксом её, а pjax релоадить при успешном сохранении.

$(document).on('beforeSubmit', '#my-form', function () {
        var _this = $(this);

        $.ajax({
            url: _this.attr('action'),
            data: _this.serialize(),
            type: 'POST',
            dataType: 'json',
            success: function (response) {
                if (response.success) {
                    $.pjax.reload({
                          container: "#my-pjax-container-id" 
                    });
                } else {
                    // alert
                }
            },
            error: function (jqXHR, textStatus, errorThrown) {
                console.info(textStatus + ' ' + errorThrown);
            }
        });

        return false;
    });
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Не получится, проще сделать свой велосипед. Проверено болью, страданием и потраченным временем. Можно используя pjax в том числе, но без js ручками не обойтись.
Ответ написан
Комментировать
Nemozar
@Nemozar
Php developer
Попробуйте сделать редирект на action отрисовки формы.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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