2011-12-22 33 views
0

在我的應用程序中,我有一個名爲「client」的模塊。我希望創建一個子目錄「語句」,在「賬戶」下面,然後是「account_123」,並在此目錄內顯示代表clint 123的語句的pdf。 結構客戶端然後語句然後賬戶然後acount_XXX和pdf文件。通過Zend MVC中的鏈接查看文件

問題

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

是MVC我想提出一點陸侃。

我把這個結構移到了public裏面,除了我無法動態檢索主機名i.r. www.hostnam.com/client/statement ....

我知道這是一個安全問題,所以我已經將目錄移回客戶端模塊下面。

任何幫助將得到重視。

TIA蓮

回答

0

據我知道你不能把一個直接鏈接到下的「應用程序」導演放在一個文件(由於安全問題,因爲你已經寫了),可能的解決方案,這樣一個是製作一個讀取文件內容並將其返回給響應對象的動作。

當用戶單擊此操作的鏈接時,用戶會看到一個窗口來打開/保存提供的文件。

例子:

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

我把上面的代碼中的一些常數,因爲它的價值取決於你的應用。

+0

我可以隱藏打開/保存對話框嗎?即只顯示文件,因爲我可以在直接的PHP非MVC應用程序? – Ephraim 2011-12-23 10:04:33

+0

我不完全明白你想達到什麼 - 你能解釋一下嗎?你想在網頁上顯示PDF文件的內容嗎?我以爲你想創建一個可以由用戶下載的文件鏈接。 – 2011-12-23 11:43:36

+0

前者正確。 Firefox打開一個對話框,爲我提供了打開或保存的選項。我不希望使用對話框,並且在沒有對話框的情況下在Acrobat中打開PDF。與內容類型有關我嘗試過'application/pdf',但它不起作用。艾米的想法TIA。 – Ephraim 2011-12-27 21:42:23