Yii验证码验证检查不起作用

时间:2015-02-04 15:32:58

标签: yii captcha

这是我的模特:

public function rules() {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.

        if ($this->scenario == "insert") {
            return array(
                array('requisition_id, sync', 'numerical', 'integerOnly' => true),
                array('lastname, firstname, email, dob, phone, cv_path, experienceMonths, experienceYears, competencies, token', 'required', 'message' => "Câmpul este obligatoriu"),
                array('email', 'email', 'message' => "Emailul este invalid!"),
                array('dob', 'validateDob'),
                array('dayOfBirth, monthOfBirth, yearOfBirth', 'safe'),
                array('taleo_id, sync', 'required', 'on' => 'taleoUpdate'),
                array('verifyCode', 'on' => 'insert'),
                // The following rule is used by search().
                // Please remove those attributes that should not be searched.
            );
        } else if ($this->scenario == 'taleoUpdate') {
            return array(
                array('taleo_id, sync', 'required'),
                // The following rule is used by search().
                // Please remove those attributes that should not be searched.
            );
        }
        else if($this->scenario == 'notjobapply'){
            return array(
                array('lastname, firstname, email, phone, cv_path, requisition_id', 'required', 'message'=>'Câmpul este obligatoriu'),
                array('email', 'email', 'message' => "Emailul este invalid!"),
            );
        }


        return array(
            array('id, lastname, email, phone, dob, requisition_id, experienceMonths, experienceYears, sync, cv_path, created', 'safe', 'on' => 'search'),
            array('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements(),'on'=>'captchaRequired'),
        );
    }

我的问题是它没有验证图像中的字母。我不知道为什么。我认为我的验证在规则中是不正确的。任何线索?

1 个答案:

答案 0 :(得分:0)

是的,你有很多场景,并对它们应用不同的规则。

确保您当前运行的方案确实具有验证规则。

我可以看到你以两种方式使用场景,一种是你正在使用的条件我不完全确定它们有效,但也许它们可以。

第二种是Yii方式,通过在每个规则声明中的“on”属性中指定。

我建议在这个结构中再次从头开始编写所有规则:

return array(
    // scenarioA
    array('field1, field2', 'required', 'on' => 'scenarioA'),
    array('field1, field2', 'required', 'on' => 'scenarioA'),
    array('field1, field2', 'required', 'on' => 'scenarioA'),
    // scenarioB
    array('field3, field4', 'required', 'on' => 'scenarioB'),
    array('field3, field4', 'required', 'on' => 'scenarioB'),
    array('field3, field4', 'required', 'on' => 'scenarioB'),
    // scenarioC
    array('field5, field6', 'required', 'on' => 'scenarioC'),
    array('field5, field6', 'required', 'on' => 'scenarioC'),
    array('field5, field6', 'required', 'on' => 'scenarioC'),
);

或者,如果您测试它们的行为正确,您可以保留条件块解决方案,但在这种情况下,您应该从块内的规则中删除“on”参数。

因为例如:

if ($this->scenario == "insert") {
            return array(
                ...
                array('taleo_id, sync', 'required', 'on' => 'taleoUpdate'),

您将代码置于验证方案为“insert”的条件下,然后再次指定“on”,这将使该规则仅应用于“taleoUpdate”方案,因此没有任何意义。

哦,至于验证码,正如您可以看到的格式,如果场景与您上面指定的场景不同,您只能达到规则。