修改$this->;请求->;CakePHP模型中的数据?
如何在CakePHP中修改$this->request->模型中的数据。我用model User中的代码进行了尝试:修改$this->;请求->;CakePHP模型中的数据?,php,cakephp,cakephp-2.6,Php,Cakephp,Cakephp 2.6,如何在CakePHP中修改$this->request->模型中的数据。我用model User中的代码进行了尝试: public function beforeValidate($options = array()) { unset($this->request->data['User']['birthday']); } public function beforeValidate($options = array()) { unset($this->dat
public function beforeValidate($options = array()) {
unset($this->request->data['User']['birthday']);
}
public function beforeValidate($options = array()) {
unset($this->data[$this->alias]['birthday']);
}
但它会返回错误:
注意(8):重载属性的间接修改
用户::$request无效
警告(2):试图修改非对象的属性
如果我使用(模型用户):
没关系,但在验证之后,当我尝试在控制器中打印($this->request->data)时,我看到了仍然存在于其中的生日字段
任何人都可以给我一个解决方案,在$this->data和$this->request->data之间是不同的,谢谢
编辑:我的CakePHP版本是2.6.7-最新版本。
$this->request->data
无法从模型中访问。此数据只能从控制器访问。当您试图将数据从控制器保存到模型时(例如,$this->User->save($this->request->data))
),您正在设置用户
模型的数据
属性。换句话说,这种情况正在发生:-
$this->User->data = $this->request->data;
因此,在模型的回调方法中,您可以使用$this->data
访问正在保存的数据,并按照您在beforeValidate()中找到的方法对其进行操作:-
当使用此回调调用父方法并确保其返回布尔值时,不要忘记。如果不返回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']);
正如旁注一样,请注意不要在模型回调中取消设置数据,因为每次尝试保存数据时都会这样做(除非禁用回调)。因此,取消设置生日
将导致它永远无法保存到您的数据库中。您应该始终提及您使用的确切cakephp版本。您甚至用谷歌搜索过错误吗?这里有几个例子。这样:当你回复他们时,别忘了在他们的名字前打上一个@(比如:@mark),否则他们不会收到你的回复。
unset($this->request->data[$this->alias]['birthday']);