对非对象上的成员函数setRules()的CakePHP验证程序调用
我在CakePHP 2中工作,我一直在尝试使用动态验证,因为当我让用户注册帐户时,我需要不同的规则(用户名和电子邮件都是必需的),但当用户填写忘记密码表单时,用户名或电子邮件是必需的,但不允许您同时填写用户名和电子邮件 我从对非对象上的成员函数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
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),但仍然出现相同的错误。