如何使用ActiveForm和Pjax删除Yii2重定向?

时间:2018-10-15 11:47:18

标签: ajax forms yii2 pjax active-form

提交表单后,我在重定向方面遇到问题。

第一个:我有此表格供订阅用户使用。

<?php if (Yii::$app->session->hasFlash('success')): ?>
                    <div class="alert alert-form alert-success text-xs-center">
                        <?= Yii::$app->session->getFlash('success') ?>
                    </div>
                <?php endif; ?>
        <?php Pjax::begin(['id' => 'my-pjax']); ?>
        <?php $form = ActiveForm::begin([
                'enableAjaxValidation' => true,
                'validationUrl' => 'validate',
                'options' => [
                    'class' => 'mbr-form',
                    'data-pjax' => true,
                ],
        ]); ?>

        <div class="row row-sm-offset">
            <div class="col-md-4 multi-horizontal">
                <div class="form-group">
                    <?= $form->field($model, 'fio')->input('text', ['placeholder' => 'Иванов Иван Иванович'])->label('Ф.И.О',['class' => 'form-control-label mbr-fonts-style display-7']) ?>
                </div>
            </div>

            <div class="col-md-4 multi-horizontal">
                <div class="form-group">
                    <?= $form->field($model, 'email', ['enableAjaxValidation' => true])->input('email', ['placeholder' => 'ivanov.ivan@schoolofwriting.ru'])->label('Email', ['class' => 'form-control-label mbr-fonts-style display-7']) ?>
                </div>
            </div>
        </div>

        <span class="input-group-btn"><?= Html::submitButton('ЗАПИСАТЬСЯ', ['class' => 'btn btn-form btn-success display-4']) ?></span>

        <?php $form = ActiveForm::end(); ?>
        <?php Pjax::end(); ?>

第二个:我有负责表单操作的控制器。

public function actionFree()
    {
        $this->view->title = "ШКОЛА ПИСАТЕЛЬСКОГО МАСТЕРСТВА: Новичок рассказов";

        $model = new SubscribeForm();
        $password = $model->generateStrongPassword(12);
        $model->course = 1;
        $model->password = md5($password);

        if($model->load(Yii::$app->request->post()) && $model->save()) {
            if ($model->save()) {

                Yii::$app->session->setFlash('success', 'Будущий писатель, вскоре ты получишь письмо с инструкцией!
                  Надеемся, что курс тебе понравится и мы продолжим обучение');
            }
            else {
                Yii::$app->session->setFlash('error', $model->errors);
            }
        }
        else {
            // страница отображается первый раз
            return $this->render('free-course', ['model' => $model]);
        }
    }

    public function actionValidate() {
        $model = new SubscribeForm();

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

我做什么?我使用电子邮件字段的验证,以便它不会重复,并在表格下输出消息。然后我得到POST数据并将其保存到控制器内部的数据库中。结果,我想设置FLASH MESSAGE并将其显示在当前打开的页面中,而无需重定向和刷新。

所以.. 我总是很高兴。为什么?

0 个答案:

没有答案