修改模型 CakePHP 中的 $this->request->data?
Modify $this->request->data in model CakePHP?
如何在 CakePHP 中修改模型中的 $this->request->data。我用模型用户中的代码尝试了它:
public function beforeValidate($options = array()) {
unset($this->request->data['User']['birthday']);
}
但是 return 错误:
Notice (8): Indirect modification of overloaded property
User::$request has no effect
Warning (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->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);
}
不要忘记使用此回调调用父方法并确保它 return 是布尔值。如果没有 return 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
将导致它永远不会保存到您的数据库中。
如何在 CakePHP 中修改模型中的 $this->request->data。我用模型用户中的代码尝试了它:
public function beforeValidate($options = array()) {
unset($this->request->data['User']['birthday']);
}
但是 return 错误:
Notice (8): Indirect modification of overloaded property User::$request has no effect
Warning (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->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);
}
不要忘记使用此回调调用父方法并确保它 return 是布尔值。如果没有 return 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
将导致它永远不会保存到您的数据库中。