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

标签 php cakephp post cakephp-2.0

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

View 上的表单:

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() 来自 Controller 的请求数据时看到的内容:

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

这是怎么回事?

最佳答案

文件上传数据只能在 CakeRequest::$data 中找到,以防输入元素名称在名为 data 的数组中传递(这是默认情况下不是手动定义特定名称),即:

<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']);

关于php - CakePHP:发布的文件数据不包含在请求->数据中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17622880/

相关文章:

php - 我如何告诉 Composer 安装最小文件

mysql - 使用 CakePHP 或 MySQL FK 处理级联?

javascript - if语句cakephp输入值并运行javascript代码

php - 向 Hackerrank API 请求的 POST 数据编码

php - 在 PHP 中检查 memory_limit

php - MySQLi multi_query 不工作

javascript - PNG 发布数据对于 PHP 来说太大

PHP $_POST 不返回值

php - 如何对多维数组求和

database - cakePHP测试如何选择测试DB