我们发送一个zip文件下载作为这样的回复:
$this->response->file( "/export/stuff.zip", array('downlaod'=>true, 'name'=>"stuff.zip") );
return $this->response;
这工作正常,但文件总是命名为export.zip
。我们的name
选项似乎没有任何影响。我们也试过没有.zip扩展名。这很令人困惑,因为name
选项在文档中显示为here。
我们做错了什么?
更新:我们发现看似任意名称“export”正在从控制器操作的名称中复制。我们将方法名称更改为“admin_exportt”,然后每次都获得exportt.zip。这在我见过的任何地方都没有记录。
我们在源代码中找到了名称的处理位置(/lib/Cake/Nework/CakeResponse.php:1254),看起来它应该使用原始文件名,或者name
选项中指定的任何名称:
if (is_null($options['name'])) {
$name = $file->name;
} else {
$name = $options['name'];
}
啊!我们弄清楚出了什么问题......
注意上面代码第一行中的downlaod
这个词?那是罪魁祸首。显然,糟糕的选择导致整个数组被忽略。我不确定这对未来是否会有所帮助,但我想我会把它留下来提醒一下CakePHP选项是这样工作的(在这种情况下至少)。
PS:每当你被困住,去散步回来吧!