如何允许从 CakePHP 3 中的控制器下载本地文件
How to allow download local file from controller in CakePHP 3
我的应用程序使用 CakePHP 3.4+。
本地路径有XML文件,点击link需要下载。在根据我的应用程序
检查了一些要求后,我想return从控制器的操作中下载
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'
],
) ?>
但这只会在点击 link
时显示一个空白页面
with*
响应方法是使用 PSR-7 不变性模式实现的,即它们 return 一个新对象而不是修改当前对象。您必须 return 新创建的对象:
return $this->response->withFile($xmlLink, [
'download' => true,
'name' => 'data.xml',
]);
如果您不想 return 自定义响应,即如果您想要呈现视图而不是 return 响应对象,那么您必须重新分配$this->response
的新对象以应用修改。
我的应用程序使用 CakePHP 3.4+。
本地路径有XML文件,点击link需要下载。在根据我的应用程序
检查了一些要求后,我想return从控制器的操作中下载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'
],
) ?>
但这只会在点击 link
时显示一个空白页面with*
响应方法是使用 PSR-7 不变性模式实现的,即它们 return 一个新对象而不是修改当前对象。您必须 return 新创建的对象:
return $this->response->withFile($xmlLink, [
'download' => true,
'name' => 'data.xml',
]);
如果您不想 return 自定义响应,即如果您想要呈现视图而不是 return 响应对象,那么您必须重新分配$this->response
的新对象以应用修改。