CakePHP - 验证规则有语法错误,我看不到

时间:2011-07-22 15:35:30

标签: validation cakephp

我在下面评论的行上收到解析错误:语法错误,意外的T_VARIABLE,期待')'。不能为我的生活弄清楚为什么它会抛出这个错误。

public $validate = array(
    'password1' => array(
        'rule1' => array('rule' => 'alphaNumeric', 'message' => 'Your password should only contain alphanumeric characters.'),
        'rule2' => array('rule' => '/\d/', 'message' => 'Your password must contain at least one numeric character.'),
        'rule3' => array('rule' => '/^(?=.*?[A-Z])(?=.*?[a-z])/', 'message' => 'Your password must contain at least one uppercase and one lowercase letter.'),
        'rule4' => array('rule' => array('minLength', 8), 'message' => 'Your password must be at least 8 characters long.'),
    ),
    'password2' => array(
        // ERROR ON LINE BELOW
        'rule' => array('_passwordsMatch', $this->data['PasswordReset']['password2']),
        'message' => 'The passwords you entered do not match.'
    )
);

/**
 * Custom validation method to check that the entered passwords match
 *
 * @param  string $password1
 * @param  string $password2
 * @return bool
 */
protected function _passwordsMatch($password1, $password2) {
    return ($password1 === $password2);
}

正如您所看到的,我正在尝试制作自定义验证规则,以检查来自用户提交的表单的两个密码。相关问题是尝试将其他字段值传递给自定义规则是错误的方法吗?

2 个答案:

答案 0 :(得分:1)

在类属性的初始化语法中,不允许引用$this。如果确实需要,则必须将数组定义移动到类构造函数。

引用Documentation

  

[Properties]通过使用public,protected或private之一,然后是普通变量声明来定义。此声明可能包括初始化,但此初始化必须是常量值 - 也就是说,它必须能够在编译时进行评估,并且必须不依赖于运行时信息才能成为评价。

此规则在编译时强制执行,因此静态array()语法的语法规则不允许任意表达式。这就是为什么你得到语法错误:而不是$this,解析器需要)关闭array(

答案 1 :(得分:0)

有趣的是,现在经常出现这种情况 查看CakePHP validation rule to match field1 and field2关于此主题的清晰行为方法(请参阅我的回答)

还要注意: 在我看来,你的字母数字规则是不合适的。你永远不应该强迫用户在密码字段中使用更少的字符。许多用户使用至少一些特殊的char和DONT使用你的大写或小写风格。 我认为你限制用户超过需要。