Проверьте правила проверки в структуре Yii
Я новичок в Yii Framework, поэтому я пытаюсь понять, как это работает. У меня есть следующие правила проверки для пользователя, создающего форму, теперь мне нужно проверить метод afterValidation(), если все правила проверки прошли хэш-пароль пользователя. Чего я не знаю, так это того, есть ли в Yii встроенный метод, который возвращает true или false, если правила проверки пройдены или нет.
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('email, password, username', 'required'),
array('email, username, password', 'length', 'max'=>256),
array('email, username', 'unique'),
array('password', 'compare'),
array('password_repeat', 'safe'),
);
}
protected function afterValidate()
{
parent::afterValidate();
if("VALIDATION RULES HAVE PASSED, ther is no error message")
{
$this->password = $this->encrypt($this->password);
}
}
public function encrypt($value)
{
return md5($value);
}
2 ответа
Метод, который вы должны использовать, это $this->hasErrors(), так как проверка вашей формы уже выполнена. Вероятная причина ошибки вложения заключается в том, что она вызывает ваш afterValidate()
после каждого $this->validate()
так как я думаю, что это вызывается автоматически, если проверка выполняется, и вы просто в конечном итоге с бесконечным циклом
Вместо этого, если положить что-нибудь в afterValidate()
, который запускается в цикле проверки, я думаю, что вы хотите поместить свой код в beforeSave()
,
beforeSave()
будет выполняться только в том случае, если ваши правила проверки выполняются и не имеют ошибок.
В качестве бонуса: если вы просто работаете со стандартными паролями, рассмотрите возможность использования поведения Yii Password. Это сэкономит вам много времени и уже было тщательно проверено некоторыми из лучших программистов Yii.