【问题标题】:Modify $this->request->data in model CakePHP?修改模型 CakePHP 中的 $this->request->data?
【发布时间】:2015-06-20 02:43:19
【问题描述】:

如何在 CakePHP 中修改模型中的 $this->request->data。我用模型用户中的代码尝试了它:

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

【问题讨论】:

  • 您应该始终提及您正在使用的确切 cakephp 版本。
  • 你用谷歌搜索过这个错误吗?有几个例子。像这样:stackoverflow.com/questions/13421661/…
  • 当你回复他们时,不要忘记在他们的名字前用@ ping他们(比如:@mark),否则他们不会收到你的回复的通知。

标签: php cakephp cakephp-2.6


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 2016-04-09
    相关资源
    最近更新 更多