У меня есть стандартная модель LoginForm
, в которой используется CAPTCHA для входа. Во всяком случае, на какой-то странице мне нужно войти без переписки. Для этого я добавил public $useCaptcha = true;
. Когда это false
, CAPTCHA не нужно. Я также добавил одно правило:Yii - rule allowEmpty для модели
array('verifyCode', 'captcha', 'allowEmpty'=>!Yii::app()->user->isGuest || !CCaptcha::checkRequirements() || !$this->useCaptcha)
Но мое правило не работает. Это всегда возвращает false. В решении я использовать beforeValidation
функцию:
protected function beforeValidate()
{
if(!$this->useCaptcha)
{
$this->getValidators()[4]->allowEmpty = true;
}
return true;
}
Но это не хорошее решение. Почему allowEmpty
правило возвращается false
?
Вы использовали сценарии, например on => login empty => true – Gunnit
@Gunnit, когда я использую 'array ('verifyCode', 'captcha', 'on' => 'useCaptcha')' вместо правила в верхней части - Я всегда получаю ошибку - «Код подтверждения неверен». Для заданного сценария я использую 'protected function beforeValidate() { if ($ this-> useCaptcha) { $ this-> setScenario ('useCaptcha'); } return true; } ' – f0rtis
попробуйте взглянуть на это => http://www.yiiframework.com/forum/index.php/topic/21561-captcha-custom-validation/, я думаю, что это похоже на вашу проблему. – Gunnit