如何在CakePHP中修改模型中的$ this-> request->数据。我尝试使用模型User中的代码:
public function beforeValidate($options = array()) {
unset($this->request->data['User']['birthday']);
}
但它会返回错误:
注意(8):间接修改重载属性 User :: $ request无效
警告(2):尝试修改非对象的属性
如果我使用(型号用户):
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 - 最新版本。
答案 0 :(得分:4)
$this->request->data
。此数据只能从控制器访问。当您尝试从控制器(例如 $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->data
,则不会影响$this->request->data
,但您始终可以从控制器中访问模型的data
属性以查看更改。例如,保存更改后在控制器中: -
// Output the User data
debug($this->User->data);
如果你真的想改变$this->request->data
,那么你需要在控制器内(大概是在保存之前)这样做,而不是模型: -
unset($this->request->data[$this->alias]['birthday']);
正如旁注一样,请注意在模型回调中取消设置数据,因为每次尝试保存数据时都会这样做(除非您禁用回调)。因此,取消设置birthday
会导致它永远不会保存到您的数据库中。