我正在使用Kohana 3.3并尝试编写自定义验证规则,以确保用户的用户名和电子邮件地址是唯一的。我按照SO question here和Kohana documentation here的说明操作,但每当我尝试添加array(array($this, 'unique_email'))
时,我都会syntax error, unexpected '$this' (T_VARIABLE), expecting ')'
。
如果我提出array(array('Model_User', 'unique_email'))
我没有收到任何错误,但为什么使用$this
会导致错误?为了完整起见,我在下面发布了完整的课程。
class Model_User extends ORM {
protected $_rules = array(
'email' => array(
array(array($this, 'unique_email')),
)
);
public function unique_email()
{
return TRUE;
}
}
答案 0 :(得分:2)
声明类属性时,只能使用常量值。
请参阅:http://php.net/manual/en/language.oop5.properties.php
因此,在首次声明您的类属性时,您无法使用$this
。
你可以在构造函数中使用$this
。所以你可以这样做:
public function __construct() {
$this->_rules['email'] = array(
array(array($this, 'unique_email'))
);
}
编辑:kingkero在评论中指出Kohana为您提供了rules()方法,您应该使用该方法而不是构造函数。