修改CakePHP模型中的$ this-> request->数据?

时间:2015-06-20 02:43:19

标签: php cakephp cakephp-2.6

如何在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 - 最新版本。

1 个答案:

答案 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会导致它永远不会保存到您的数据库中。