CakePHP 3-无论主机和项目名称如何下载

CakePHP 3-无论主机和项目名称如何下载,cakephp,download,cakephp-3.0,Cakephp,Download,Cakephp 3.0,在任何特定视图上,如果我包含此链接: <?php echo $this->Html->link('Download', ['controller' => 'Uploads', 'action' => 'download',$upload->id]) ?> 但是,我想知道是否有一种方法可以使文件路径更加灵活。在我的config.php中,我设置了两个名为$host和$basepath的变量,分别引用web主机(localhost)和项目名称(projec

在任何特定视图上,如果我包含此链接:

<?php echo $this->Html->link('Download', ['controller' => 'Uploads', 'action' => 'download',$upload->id]) ?>
但是,我想知道是否有一种方法可以使文件路径更加灵活。在我的
config.php
中,我设置了两个名为
$host
$basepath
的变量,分别引用web主机(localhost)和项目名称(project)。我将这些变量传递给AppController,任何视图都可以访问它们


但我似乎无法在下载函数的
$filePath
变量中使用这些变量,因此,如果我或其他任何人要更改主机或项目名称,而不是简单地更改
config.php
,我或其他任何人都必须找到并更改它(如果我在多个控制器中有多个下载函数,它们就必须去更改它们中的每一个)。

看看CakePHP全局常量。您可以使用
WWW\u ROOT
轻松访问webroot的路径


查看CakePHP全局常量。您可以使用
WWW\u ROOT
轻松访问webroot的路径


您的意思是想以更简单的方式提供文件位置路径吗?如果是这样,您可以使用基本url或在某个地方将该路径定义为常量。您的意思是想以更简单的方式提供文件位置路径吗?如果是这样,您可以使用基本url或在某个地方将该路径定义为常量。当我尝试使用WWW_ROOT时,如下所示:
$filePath=WWW_ROOT.'uploads.DS.$upload->name;
,在尝试下载时出现此错误(下载的示例文件是一个名为Book1.xlsx的空白Excel文件:
请求的文件C:\xampp\htdocs\project\src\C:\xampp\htdocs\project\webroot\uploads\Book1.xlsx找不到或不可读
。WWW\u ROOT似乎先尝试进入源代码,然后再返回到正确的控制器y、 @mistaq当您调试$filePath时,它看起来正确吗?如果正确,请参阅此处调试($filePath)给出了这样的答案:“C:\xampp\htdocs\project\webroot\”。但无论如何,我从中找到了答案,并将$filePath更改为“WWW_ROOT.DS.uploads”;当我尝试使用WWW_ROOT时,如下所示:
$filePath=WWW_ROOT.uploads.DS.$upload->name;
,我在尝试下载时出现此错误(下载的示例文件是一个名为Book1.xlsx的空白Excel文件:
请求的文件C:\xampp\htdocs\project\src\C:\xampp\htdocs\project\webroot\uploads\Book1.xlsx找不到或不可读
。WWW\u ROOT似乎先尝试进入源代码,然后再返回到正确的控制器y、 @mistaq当您调试$filePath时,它看起来正确吗?如果正确,请参见这里的debug($filePath)给出这样的信息:“C:\xampp\htdocs\project\webroot\”。但无论如何,我从中找到了答案,并将$filePath更改为“WWW_ROOT.DS.”;
$upload = $this->Uploads->find('all')->first();
$filePath = '\xampp\htdocs\project\webroot\uploads'; //file path to where the uploaded file is
$this->response->file($filePath . DS . $upload->name,
    array('download' => true, 'name' => $upload->name)); //finds the corresponding name attribute in the Uploads table of the database, finds a matching name in the uploads directory and then downloads that file.

$this->set(compact('upload'));