我在下面评论的行上收到解析错误:语法错误,意外的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);
}
正如您所看到的,我正在尝试制作自定义验证规则,以检查来自用户提交的表单的两个密码。相关问题是尝试将其他字段值传递给自定义规则是错误的方法吗?
答案 0 :(得分:1)
在类属性的初始化语法中,不允许引用$this
。如果确实需要,则必须将数组定义移动到类构造函数。
[Properties]通过使用public,protected或private之一,然后是普通变量声明来定义。此声明可能包括初始化,但此初始化必须是常量值 - 也就是说,它必须能够在编译时进行评估,并且必须不依赖于运行时信息才能成为评价。
此规则在编译时强制执行,因此静态array()
语法的语法规则不允许任意表达式。这就是为什么你得到语法错误:而不是$this
,解析器需要)
关闭array(
。
答案 1 :(得分:0)
有趣的是,现在经常出现这种情况 查看CakePHP validation rule to match field1 and field2关于此主题的清晰行为方法(请参阅我的回答)
还要注意: 在我看来,你的字母数字规则是不合适的。你永远不应该强迫用户在密码字段中使用更少的字符。许多用户使用至少一些特殊的char和DONT使用你的大写或小写风格。 我认为你限制用户超过需要。