Валдицая модели на разных страницах

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

Валдицая модели на разных страницах

Сообщение FunStrike »

Здравствуйте, у меня возникла проблема с валидацией одной модели на разных страницах. Тоесть у меня есть модель SignUp, я разделил саму регистрацию на несколько страниц, на первой ФИО на сторой пароль, майл. на первой странице все работает, если я оставлю поле пустым и перейду на другое поле, то высвечет ошибку что надо заполнить, но после перехода к следующему этапу, валидация не срабатывает пока не отправлю запрос.


View Первой страницы

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

<?php $form = ActiveForm::begin([ 'id' => 'form-signup', ]); ?>
<?= $form->field($model, 'last_name', 
	['template' => '<p>Last Name:*</p>{input}{error}'
	])->textInput(['autofocus' => true])->label(false) ?>
<?= $form->field($model, 'first_name',  
	['template' => '<p>First Name:*</p>{input}{error}'
	])->textInput()->label(false) ?>
<?php $suffix = (Yii::$app->session->hasFlash('userexist')) ? '' : 'notactive'; ?>
<?= $form->field($model, 'suffix', 
	[ 'inputOptions' => ['class' => $suffix], 'template' => '<p>Suffix:*</p>{input}{error}'
	])->textInput()->label(false) ?>				 
<div class="col-md-4 col-md-offset-8 col-sm-4 col-sm-offset-8 col-xs-6 col-xs-offset-0 middle_button">
	<?= Html::submitButton('next', ['class' => 'gray_button', 'name' => 'signup-button']) ?>
</div>
<?php ActiveForm::end(); ?>
View Второй страницы

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

<?php $form = ActiveForm::begin(['id' => 'form-signup-full']); ?>
<?= $form->field($model, 'username')->hiddenInput()->label(false) ?>
<?= $form->field($model, 'last_name')->hiddenInput()->label(false) ?>
<?= $form->field($model, 'first_name')->hiddenInput()->label(false) ?>
<?= $form->field($model, 'suffix')->hiddenInput()->label(false) ?>
                
<?= $form->field($model, 'password', [
	'options' => ['class' => 'col-xs-12 col-md-6'],
	'template' => '<p>password*:></p>{input}{error}'
	])->passwordInput(['autofocus' => true])->label(false) ?>
<?= $form->field($model, 'password_check', [
	 'options' => ['class' => 'col-xs-12 col-md-6'],
	'template' => '<p>Password check*:</p>{input}{error}'
	])->passwordInput()->label(false) ?>    	
<div class="col-md-4 col-md-offset-8 col-sm-4 col-sm-offset-8 col-xs-6 col-xs-offset-0 middle_button">
	<?= Html::submitButton('Save'), ['class' => 'gray_button', 'name' => 'signup-full-button']) ?>
</div>
<?php ActiveForm::end(); ?>
Модель

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

    public $username;
    public $password;
    public $password_check;
    public $last_name;
    public $first_name;
    public $suffix;
    
    public function scenarios()
    {
    	return [
    		'minimal' => ['last_name', 'first_name', 'username', 'suffix'],
    		'full' => ['username', 'last_name', 'first_name', 'suffix','password','password_check']
    	];
    }
    
    public function rules()
    {
    	return [
    		[['last_name', 'suffix', 'first_name', 'password', 'password_check'], 'trim'],
    		[['password'], 'string', 'min' => 6, 'max' => 64],
    		['email', 'email'],
    		['password_check', 'compare', 'compareAttribute' => 'password'],
    		['email_check', 'compare', 'compareAttribute' => 'email'],
    		[['last_name', 'first_name', 'password', 'password_check'], 'required'],
    		[['last_name', 'first_name', 'suffix'], 'string', 'min' => 2, 'max' => 255],
    		[['password'], 'match', 'pattern' => '/^(?=(.*[a-z]){1})(?=(.*[A-Z]){1})(?=(.*\d){3})(?=(.*[$@!%*#?&]){1}).+/']
    	];
    }
Контроллер

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

    public function actionSignup()
    {
        if (!Yii::$app->user->isGuest) {
            return $this->goHome();
        }
        $post = Yii::$app->request->post('SignupForm');
        $scenario = (!empty($post['username'])) ? 'full' : 'minimal';
        $model = new SignupForm(['scenario' => $scenario]);
        if ($model->load(Yii::$app->request->post())) {
            //Шаг первый
            if ($scenario == 'minimal')
            {
                $model->username = $model->last_name.'_'.$model->first_name;
                if (!empty($model->suffix)) $model->username .= '_'.$model->suffix;
                if (!$model->checkExist()) {
                    return $this->render('signup_full', [
                        'model' => $model,
                    ]);
                }
                else {
                    //Уже есть такой юзер
                    if (empty($model->suffix)) Yii::$app->session->setFlash('username_exist', Yii::t('app', 'Username exist'));
                    else Yii::$app->session->setFlash('username_exist', Yii::t('app', 'Username suffix exist'));
                    Yii::$app->session->setFlash('userexist');
                    return $this->render('signup', [
                        'model' => $model,
                    ]);
                }
            }
            else { //Шаг второй
                if (!$model->emailExist())
                {
                    if ($model->signup() != null) {
                        //Регистрация прошла успешно
                        Yii::$app->session->setFlash('signup_success', Yii::t('app', 'User signup'));
                        return $this->redirect(Url::to(['site/index']));
                    }
                    else {
                        //Ошибка создания юзера
                        foreach ($model->getErrors() as $key => $value) {
                            Yii::$app->session->setFlash('error', $value);
                        }
                    }
                }
                else {
                    Yii::$app->session->setFlash('full_username_exist', Yii::t('app', 'Email exist'));
                }
                return $this->render('signup_full', [
                    'model' => $model,
                ]);
            }
        }

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

П.С. Если перекинуть поля со второй старницы в первую все работает. Код View и Model но там все остнольное то что Yii генерирует.
Ответить