我使用CakePHP 3.4+作为我的应用程序。
本地路径中有一个XML文件,在点击链接时需要下载。我想根据我的应用程序检查一些要求后,从控制器的操作中返回下载
public function downloadXml()
{
if ($this->_checkMembership()) {
try {
// file path /webroot/agency/data.xml
$xmlLink = WWW_ROOT . 'agency/data.xml';
$this->response->withFile($xmlLink, [
'download' => true,
'name' => 'data.xml',
]);
return $this->response;
} catch (NotFoundException $e) {
$this->Flash->error('Requested file not found. Try again');
return $this->redirect(['action' => 'index']);
}
}
}
在模板中
<?= $this->Html->link(
__('Download the site'),
[
'action' => 'downloadXml'
],
) ?>
但这只是在点击链接时显示空白页
答案 0 :(得分:4)
使用PSR-7不变性模式实现with*
响应方法,即它们返回一个新对象而不是修改当前对象。您必须返回新创建的对象:
return $this->response->withFile($xmlLink, [
'download' => true,
'name' => 'data.xml',
]);
如果您没有返回自定义响应,即如果您想渲染视图而不是返回响应对象,那么您必须将新对象重新分配给{{ 1}}以便应用修改。