修改$this->;请求->;CakePHP模型中的数据?

修改$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

如何在CakePHP中修改$this->request->模型中的数据。我用model User中的代码进行了尝试:

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']);