Релоад формы при ошибке

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
devv
Сообщения: 39
Зарегистрирован: 2015.04.26, 22:37

Релоад формы при ошибке

Сообщение devv »

Здравствуйте! Возникла следующая проблема. При валидации значений в модели LoginForm посредником, передающим ошибки в форму является метод addError:

Код: Выделить всё

    public function validatePassword()
    {
        if (!$this->hasErrors()) {
            $user = $this->getUser();
            if (!$user || !$user->validatePassword($this->password)) {
                $this->addError('password', Yii::t('frontend', 'Incorrect username or password.'));
            }
        }
    }
Но проблема в том, что этим методом ошибка отправляется с перезагрузкой некоторых частей формы (заметно по css эффектам) и в результате этого не работает переход на следующие страницы модального окна и кнопка. Закомментировав метод addError, ошибка не показывается, зато работает всё прекрасно. Необходимо эту ошибку отобразить в клиентской части как-то по другому...

Код: Выделить всё

        <?php \yii\widgets\Pjax::begin(['enablePushState' => false]) ?>
        <?php $form = ActiveForm::begin([
            'action' => '/login',
            'options' => [
                'class' => 'subscription-form form-inline fadeInRight animated animated',
                'enableClientValidation' => false,
                'data-pjax' => true
            ],
        ]); ?>
        <?= $form->field($model, 'identity', [
            'options' => [
                'class' => 'col-md-6',
            ],
        ])->textInput(['placeholder' => 'Логин или e-mail'])->label(false) ?>

        <?= $form->field($model, 'password', [
            'options' => [
                'class' => 'col-md-6',
            ],
        ])->passwordInput(['placeholder' => 'Пароль'])->label(false) ?>

        <div class="col-md-12" style="margin: 1em 0">
            <?= Yii::t('frontend', 'If you forgot your password you can reset it <a class="reset-a" href="#">here</a>') ?>
        </div>

        <div class="col-md-12">
            <div id="progress-button" class="progress-button">
                <button>
                    <span><?= Yii::t('frontend', 'Login') ?></span>
                </button>

                <svg class="progress-circle" width="70" height="70">
                    <path d="m35,2.5c17.955803,0 32.5,14.544199 32.5,32.5c0,17.955803 -14.544197,32.5 -32.5,32.5c-17.955803,0 -32.5,-14.544197 -32.5,-32.5c0,-17.955801 14.544197,-32.5 32.5,-32.5z"/>
                </svg>

                <svg class="checkmark" width="70" height="70">
                    <path d="m31.5,46.5l15.3,-23.2"/>
                    <path d="m31.5,46.5l-8.5,-7.1"/>
                </svg>

                <svg class="cross" width="70" height="70">
                    <path d="m35,35l-9.3,-9.3"/>
                    <path d="m35,35l9.3,9.3"/>
                    <path d="m35,35l-9.3,9.3"/>
                    <path d="m35,35l9.3,-9.3"/>
                </svg>

            </div>
        </div>
        <?php ActiveForm::end(); ?>
        <?php \yii\widgets\Pjax::end() ?>

Пробовал даже так, но ничего

Код: Выделить всё

echo Yii::$app->view->renderAjax('@frontend/modules/user/views/default/error'); 

unclead
Сообщения: 160
Зарегистрирован: 2015.03.13, 19:44

Re: Релоад формы при ошибке

Сообщение unclead »

есть у меня подозрение, что все дела в pjax, т.к. при сабмите формы он перехватывает запрос и перерисовывает часть формы тем самым меняется DOM-дерево и перестают работать js-колбеки.

devv
Сообщения: 39
Зарегистрирован: 2015.04.26, 22:37

Re: Релоад формы при ошибке

Сообщение devv »

Решил проблему немного иным способом. Php код менять не стал, а просто вынес button за пределы формы, связал атрибутом form и с помощью js задал интервал в одну секунду, из-за долгой валидации. Зато кнопка няшная

Закрыто