如何在CakePHP中修改$this-> request->数据.我在模型User中尝试了代码:
public function beforeValidate($options = array()) {
unset($this->request->data['User']['birthday']);
}
但是它返回错误:
Notice (8): Indirect modification of overloaded property
User::$request has no effectWarning (2): Attempt to modify property of non-object
如果我使用(模型用户):
public function beforeValidate($options = array()) {
unset($this->data[$this->alias]['birthday']);
}
可以,但是在验证之后,当我在控制器中尝试使用print_r($this-> request-> data)时,我看到生日字段仍然存在.
任何人都可以给我一个解决方案,$this-> data和$this-> request-> data之间有所不同,谢谢!
编辑:我的CakePHP版本是2.6.7-最新版本.
解决方法:
无法从模型内部访问$this-> request->数据.该数据只能从控制器访问.当您尝试将数据从控制器保存到模型中时(例如$this-> User-> save($this-> request-> data)),您正在设置User模型的data属性.换句话说,这正在发生:
$this->User->data = $this->request->data;
因此,在模型的回调方法中,您可以访问使用$this-> data保存的数据,并像在beforeValidate()中那样对它们进行操作:
public function beforeValidate($options = array()) {
// Unset 'birthday' from data being saved
unset($this->data[$this->alias]['birthday']);
return parent::beforeValidate($options);
}
使用此回调调用父方法并确保它返回布尔值时,请不要忘记.如果未返回true,则您的数据将无法保存!
如果您在模型中操作$this->数据,则不会影响$this-> request->数据,但您始终可以从控制器内部访问模型的data属性以查看更改.例如,保存更改后在控制器中:
// Output the User data
debug($this->User->data);
如果您确实要更改$this-> request->数据,则需要在控制器内部(大概在保存之前)执行此操作,而不是模型:-
unset($this->request->data[$this->alias]['birthday']);
就像要注意的一点一样,请小心在模型回调中取消设置数据,因为每次尝试保存数据时都会这样做(除非禁用回调).因此,取消设置生日会导致它永远不会保存到数据库中.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。