cr1gger
@cr1gger
Все дороги ведут в Рим — встретимся в Риме!

Почему не работают валидаторы Yii2?

Есть модель, для регистрации.
<?php 
namespace app\models;
use Yii;
use yii\base\Model;

class Registration extends Model{
	public $number;
	public $password;
	public $too_password;

	public function rules(){
		return [
			[['number', 'password', 'too_password'], 'required'],
			['number', 'number'],
			[['password', 'too_password'], 'validatePassword'],
			['number', 'validateNumber']
		];
	}
	public function validatePassword($attribute, $params){
		if (mb_strlen($this->password) < 8)
		{
			$this->addError($attribute, 'Длина пароля должна быть более 8 символов');
		}
		if ($this->password != $this->too_password)
		{
			$this->addError($attribute, 'Пароли не совпадают');
		}
	}
	public function validateNumber($attribute, $params){
		die($this->number);
		if (mb_strlen($this->number) < 12)
		{
			$this->addError($attribute, 'Номер телефона начинается с +7 и состоит из 11 цифр включая цифру 7.');
		}
		if (mb_substr($this->number, 0, 2) != '+7')
		{
			$this->addError($attribute, 'Номер телефона должен начинаться с +7');
		}
	}
	public function attributeLabels()
    {
        return [
            'number' => Yii::t('app', 'Номер телефона'),
            'password' => Yii::t('app', 'Пароль'),
            'too_password' => Yii::t('app', 'Повторите пароль'),
            
        ];
    }
}

?>


Вот такой экшн
public function actionRegistration(){

        $reg = new Registration();
        if(Yii::$app->request->post('Registration'))
        {
            if($reg->validate()){
                var_dump(Yii::$app->request->post('Registration'));die(); 
            }
           
            
        }

        return $this->render('registration', compact('reg'));
    }

Вне зависимости от того правильно ли я все ввожу или нет. У меня в конечном итоге показывает такую картину
5e47a73ee8e79121143444.png
Где мои ошибки ? Которые я добавлял через $this->addError....
Помогите разобраться, а то чет я вообще ничего не понимаю.
Где и что я упустил
  • Вопрос задан
  • 79 просмотров
Решения вопроса 2
xEpozZ
@xEpozZ
Веб-разработчик
Потому что нужно "загружать" данные. $reg->load(Yii::$app->request->post())
public function actionRegistration()
{
    $reg = new Registration();

    if($reg->load(Yii::$app->request->post()) && $reg->validate()) {
        exit('Валидация прошла!');
    }

    return $this->render('registration', ['reg' => $reg]);
}
Ответ написан
Комментировать
slo_nik
@slo_nik Куратор тега Yii
Здесь Вы не загружаете модель.
if(Yii::$app->request->post('Registration'))
Замените на
if($reg->load(Yii::$app->request->post()))
Или как вариант, в своём коде попробуйте добавить строку после if()
$reg->attributes = Yii::$app->request->post('Registration');
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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