修改CakePHP模型中的$this-> request-> data吗?

如何在CakePHP修改$this-> request->数据.我在模型User中尝试了代码

public function beforeValidate($options = array()) {
    unset($this->request->data['User']['birthday']);
}

但是它返回错误

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->数据.该数据只能从控制器访问.当您尝试将数据从控制器保存到模型中时(例如$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->数据,则不会影响$this-> request->数据,但您始终可以从控制器内部访问模型的data属性以查看更改.例如,保存更改后在控制器中:

// Output the User data
debug($this->User->data);

如果您确实要更改$this-> request->数据,则需要在控制器内部(大概在保存之前)执行此操作,而不是模型:-

unset($this->request->data[$this->alias]['birthday']);

就像要注意的一点一样,请小心在模型回调中取消设置数据,因为每次尝试保存数据时都会这样做(除非禁用回调).因此,取消设置生日会导致它永远不会保存到数据库中.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...