对非对象上的成员函数setRules()的CakePHP验证程序调用

对非对象上的成员函数setRules()的CakePHP验证程序调用,php,validation,cakephp,model,forgot-password,Php,Validation,Cakephp,Model,Forgot Password,我在CakePHP 2中工作,我一直在尝试使用动态验证,因为当我让用户注册帐户时,我需要不同的规则(用户名和电子邮件都是必需的),但当用户填写忘记密码表单时,用户名或电子邮件是必需的,但不允许您同时填写用户名和电子邮件 我从userscocontroller在beforeFilter中调用$this->User->setValidationRules($this->request->params['action']) 然后在UserModel类中,我有以下函数: public function

我在CakePHP 2中工作,我一直在尝试使用动态验证,因为当我让用户注册帐户时,我需要不同的规则(用户名和电子邮件都是必需的),但当用户填写忘记密码表单时,用户名或电子邮件是必需的,但不允许您同时填写用户名和电子邮件

我从
userscocontroller
beforeFilter
中调用
$this->User->setValidationRules($this->request->params['action'])

然后在
User
Model类中,我有以下函数:

 public function setValidationRules($action) {
    if ($action == 'forgotten_password') {
        $this->validator()->getField('username')->setRules($this->validationSets['forgottenPassword']);
        $this->validator()->getField('email')->setRules($this->validationSets['forgottenPassword']['email']);
    } else {
        $this->validator()->getField('username')->setRules($this->validationSets['default']);
        $this->validator()->getField('email')->setRules($this->validationSets['default']['email']);
    }
    return true;
}
但我经常遇到这样的错误:“对非对象调用成员函数setRules()

我想弄明白这件事已经很久了。在
AppModel
类中,我添加了以下行:

App::Uses(Validator, Model);
但我还是犯了同样的错误

很久以来,我一直在努力寻找答案,在互联网上寻找答案,但我似乎找不到任何答案。如果有人能帮忙的话。非常感谢。

$this->validator()->getField('field')
如果模型中未定义字段,则可以返回
null

您能否发布整个模型定义以及调用
setValidationRules
的控制器函数?(这是与模型同名的控制器还是不同的控制器?)

根据您目前发布的内容,您似乎在正确设置验证器之前调用了
验证器
方法。这表示字段名中有输入错误(不太可能),模型没有正确初始化,或者调用
setValidationRules
是在模型完全构建之前发生的。我会确保控制器是唯一调用该函数的

您始终可以转储以下值:

  • $this->validator()
  • $this->validator()->getField('field')
  • $this->validator()->getField(null)
    -获取验证器中所有可用字段的列表,以及可能的问题指示
您可以查看调用
setValidationRules()
的堆栈跟踪,以确保它在您认为应该发生的时候发生


如果在问题中发布更多数据,我将能够完善我的答案。

我还尝试将AppModel类中的App::Uses(Validator,Model)更改为App::Uses(ModelValidator,Model),但仍然出现相同的错误。