2

所以我在控制器中有对象 $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”,所以这不是问题。有任何想法吗?

4

3 回答 3

7

该错误是由于 PHP 5.2+ 更改了 __get() 的工作方式——它不返回对值的引用,而是返回只读版本。Cake 2.0+ 将 __get() 用于某些控制器属性。

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

参考:Mark Story 在 Google 群组上的帖子

于 2012-04-18T07:32:02.723 回答
1

你说你想追加:

getExtension($filename)

但是然后在您的代码中,您使用:

getExtension($this->data['VideoForm']['file']['name'])
于 2012-04-18T03:45:57.370 回答
1

我不知道您遇到了什么错误,但我会重新格式化您的代码并让您发现不同之处:

$this->data['VideoForm']['filename'] =
$this->data['VideoForm']['filename'] . "." . getExtension(
$this->data['VideoForm']['file']['name']
);
于 2012-04-18T01:21:04.067 回答