Model view controller 通过Zend MVC中的链接查看文件

Model view controller 通过Zend MVC中的链接查看文件,model-view-controller,hyperlink,href,zend-framework,Model View Controller,Hyperlink,Href,Zend Framework,在我的应用程序中,我有一个名为“客户端”的模块。我希望创建一个子目录“statements”,然后在“accounts”下面创建“account_123”,并在该目录中创建表示clint 123语句的PDF。 然后构造客户端报表,然后是帐户,然后是帐户XXX和pdf文件 问题 <a href=What_is_the_url_for">statement_1.pdf</a>? ? 作为MVC,我几乎没有进步 我将该结构移动到public,除了无法动态检索主机名I.r.w

在我的应用程序中,我有一个名为“客户端”的模块。我希望创建一个子目录“statements”,然后在“accounts”下面创建“account_123”,并在该目录中创建表示clint 123语句的PDF。 然后构造客户端报表,然后是帐户,然后是帐户XXX和pdf文件

问题

<a href=What_is_the_url_for">statement_1.pdf</a>?
作为MVC,我几乎没有进步

我将该结构移动到public,除了无法动态检索主机名I.r.www.hostnam.com/client/statement

我知道这是一个安全问题,所以我已将目录移回客户机模块下方

任何帮助都将受到感激


TIA Ephraim

据我所知,您无法直接链接到“应用程序”控制器下的文件(因为您已经编写了安全问题),因此一个可能的解决方案是执行一个操作,读取文件内容并将其返回到响应对象中

当用户单击指向此操作的链接时,用户将获得一个窗口以打开/保存提供的文件

例如:

public function exampleAction() {
    $this->_helper->layout->disableLayout();
    $this->_helper->viewRenderer->setNoRender(true);

    /* ... */

    $file = "FILENAME WITH_PATH";
    $response = $this->getResponse();
    $response->setHeader('Cache-Control', 'public', true);
    $response->setHeader('Content-Description', 'public', true);
    $response->setHeader('Content-Disposition', 'attachment; filename=' . FILENAME, true);
    $response->setHeader('Content-Type', FILETYPE, true);
    $response->setHeader('Content-Transfer-Encoding', 'binary', true);
    $response->setHeader('Content-Length', filesize($file), true);                    
    $response->setBody(file_get_contents($file));
}

我在上面的代码中加入了一些常量,因为它的值取决于您的应用程序。

我可以隐藏“打开/保存”对话框吗?i、 只是在纯php非MVC应用程序中显示文件?我不完全理解您想要实现的目标-您能解释一下吗?是否要在网页中显示pdf文件的内容?我认为您希望创建一个指向用户可以下载的文件的链接。前者是正确的。Firefox会打开一个对话框,让我可以选择打开或保存。我希望没有对话框,pdf在Acrobat中打开时没有对话框。与内容类型有关我尝试了“application/pdf”,但没有成功。艾米:我想,这个问题取决于当地的节目设置。安装Acrobat Reader时,它会询问用户是否在web浏览器中自动打开PDF文件。