CakePHP:发布的请求 - >数据中未包含的文件数据

时间:2013-07-12 19:45:06

标签: php cakephp post cakephp-2.0

我正在尝试将文件上传到第三方端点,但我不能直接从我的表单发布文件,因为API需要一个我无法向最终用户公开的api_key。因此,我的计划是将表单指向控制器/操作并从那里发布数据。但是,当我从控制器内部debug($this->request->data)时,文件数据丢失。

视图上的表单:

echo $this->Form->create('Media', array('type'=>"file", 'url'=>array('controller'=>'media', 'action'=>'upload') ) );
echo $this->Form->input('name', array("name"=>"name") );
echo $this->Form->input('file', array('type'=>'file', "name"=>"file") );
echo $this->Form->input('project_id', array('type'=>'hidden', "name"=>"project_id", "value"=>$project["Project"]['hashed_id']) );
//THIS CANNOT BE HERE: echo $this->Form->input('api_password', array('type'=>'hidden', "name"=>"api_password", "value"=>'xxxxxxx') );
echo $this->Form->end("Submit");

这是我在debug()来自控制器的请求数据时看到的内容:

array(
    'name' => 'Some Name',
    'project_id' => 'dylh360omu',
)

这里发生了什么?

2 个答案:

答案 0 :(得分:7)

文件上传数据只能在CakeRequest::$data中找到,以防输入元素名称在名为data的数组中传递(这是未手动定义特定名称时的默认值),即:< / p>

<input type='file' name='data[file]'>

但是,在您的情况下,元素将如下所示:

<input type='file' name='file'>

将导致文件数据放入CakeRequest::$params[form]

<强> https://github.com/cakephp/cakephp/blob/2.4.0/lib/Cake/Network/CakeRequest.php#L346

因此,要么相应地更改表单中的名称:

$this->Form->input('file', array('type' => 'file', 'name' => 'data[file]'));

或通过CakeRequest::$params[form]访问文件数据:

debug($this->request->params['form']);

答案 1 :(得分:0)

Nunser是对的(一如既往)!问题源于自定义输入的名称。当我从options数组中删除'name'=>'...'时,文件会按预期显示。这似乎是一个错误,但如果有人有更好的解释,我很乐意听到它。