CakePHP在保存到DB之前更改数据

时间:2012-04-18 00:38:26

标签: php cakephp

所以我在控制器中有对象$ this-> data ['VideoForm'] ['filename'],但我想在将它保存到之前将getExtension($ filename)的返回值附加到它数据库。这就是我的尝试:

$this->data['VideoForm']['filename'] = $this->data['VideoForm']['filename'] . "." . getExtension($this->data['VideoForm']['file']['name']);

当我尝试使用“=”或“=>”为其分配新值时,会抛出错误运营商。知道怎么做吗?我确信这很简单,我很想念......

编辑:这是错误:

Notice (8): Indirect modification of overloaded property MediaController::$data has no effect [APP/Controller/MediaController.php, line 31]
编辑:我继续环顾四周,如果我上传xxx.jpg,getExtension()函数肯定会返回“jpg”,所以这不是问题所在。有什么想法吗?

3 个答案:

答案 0 :(得分:7)

该错误是由于PHP 5.2+在__get()工作方式的变化引起的 - 它不会返回对该值的引用,而是返回只读版本。 Cake 2.0+对某些控制器属性使用__get()。

在这种情况下,解决方案是写入$this->request->data而不是$this->data

参考:Mark Story's post on Google groups

答案 1 :(得分:1)

我不知道你得到了什么错误,但我会重新格式化你的代码并让你发现差异:

$this->data['VideoForm']['filename'] =
$this->data['VideoForm']['filename'] . "." . getExtension(
$this->data['VideoForm']['file']['name']
);

答案 2 :(得分:1)

你说你要追加:

getExtension($filename)

但是在你的代码中,你使用:

getExtension($this->data['VideoForm']['file']['name'])