Как сохранить форму с помощью pjax и non-pjax в yii2? - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть следующая форма:

<?php widgets\Pjax::begin(['id' => 'conference', 'enablePushState' => false]) ?>
     <?php $form = ActiveForm::begin(['id' => $model->formName(), enableAjaxValidation' => true, 'validationUrl' => \yii\helpers\Url::toRoute(['validation'])]); ?> 
           <?php echo $form->field($model, 'eTitle')->textInput(['maxlength' => true])->label(false) ?>  
           <?= Html::submitButton(Yii::t('app', 'save'), ['class' => 'btn btn-grid']) ?>   
      <?php ActiveForm::end(); ?>
<?php widgets\Pjax::end();?>

, и я написал follow jquery для ajax:

<?php
$script = <<< JS

    $('.conference').on('beforeSubmit', 'form#{$model->formName()}', function(e) {
        var \$form = $(this);
        $.post(
            \$form.attr("action"),
            \$form.serialize()
        )
        .done(function(result) {
            var result = $.parseJSON(result);
            var responseStatus = result['status'];
            switch (responseStatus) {
                case 'success':              
                   alert(result['message']);
                    var url = 'index.php?r=paper-conference/create';
                    $.pjax.reload({container:'#conferences', url:url, timeout: false , push: false, replace: false});
                    $('#modal').modal('hide');
                    break;
                case 'fail':
                    //T0 D0: Change to Message Box 
                    alert(result['message']);
                    break;
                default:
            }
        }).fail(function() {
            //T0 D0: do error log
            alert('server error');
        });
        return false;
    });
JS;
$this->registerJs($script);
?>

эта форма отображается двумя способами, как модальная, а иногдакак нормальная форма.когда он отображается как модальный, я хочу сохранить форму и показать alert('successfull'), а затем закрыть модальный.

если он отображается как обычная форма (не модальная), я хочу сохранить с помощью обратной передачи и не использовать pjax.

на данный момент, он хорошо работает, когда он отображается как модальный, сохраняется, а затем модальный закрывается.но я не знаю, как сделать как нормальную форму и отключить pjax.Я попытался

<?= Html::submitButton(Yii::t('app', 'save'), ['class' => 'btn btn-grid', 'data-pjax' => 0]) ?>

, но он не работает и сохраняется в ajax.

вот мой контроллер:

public function actionCreate()
    {
    $model = new Conference();
    if ($model->load(Yii::$app->request->post())) {
            if ($model->save()) {
               echo 'successfull';

            }
        } else {
            if (Yii::$app->request->isAjax)
                return $this->renderAjax('_form', [
                    'model' => $model,

                ]);
            return $this->render('_form', [
                'model' => $model,

            ]);
        }
}
...