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

时间:2011-12-22 17:20:23

标签: model-view-controller hyperlink href zend-framework

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

问题

<a href=What_is_the_url_for">statement_1.pdf</a>?

成为MVC我的进步很少。

我将结构移动到公共区域,它几乎是wotk,除了我无法动态检索主机名i.r. www.hostnam.com/client/statement ....

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

任何帮助都会得到赞赏。

TIA Ephraim

1 个答案:

答案 0 :(得分:0)

据我所知,你不能直接链接到'application'director下的文件(由于你已经写过的安全问题),所以可能的解决方案之一就是做一个读取内容的动作一个文件并将其返回到响应对象中。

当用户点击此操作的链接时,用户会看到一个窗口打开/保存提供的文件。

示例:

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));
}

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