プロジェクトでダウンロードフォームを作成しましたが、ファイルをダウンロードして開こうとすると、Zendレンダラーがレイアウトhtmlコードを追加します...レンダラーとレイアウトを無効にする必要があることを読みました。しかし、問題は、コントローラーファイルではなく、自分のヘルパーでこれを実行する必要があることです。そのヘルパーファイルにダウンロードする必要があるためです。私のダウンロード機能は次のようなものです。
<?php
class Zend_View_Helper_EditArticles extends Zend_View_Helper_Abstract
{
public function EditArticles()
{
//some code here, getting data from db table
//and now the download
if (isset($_POST['downloadarticle' . $i])) {
//this is probably bad and its not working as it should
//(?)Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')->setNoRender(true);
//(?)Zend_Controller_Action_HelperBroker::getStaticHelper('layout')->disableLayout();
$targetPath = $_SERVER['DOCUMENT_ROOT'] . '/articles/';
$file = $articles->GetArticleToDownload($_POST['art_id' . $i]);
$name = $file['name'];
$path = $file['path'];
$getfile = str_replace('//', '/', $targetPath) . $path . '.pdf';
$size = $file['size'];
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header("Content-Disposition: attachment; filename=$name.pdf");
header("Content-length: $size");
header('Content-Transfer-Encoding: binary');
readfile($getfile);
break;
}
}
echo $this->view->partial('/index/index.phtml','EditArticles');
また、PDFをダウンロードすると、Adobe Readerで開くことができません(他のファイルをダウンロードすると、それらも開くことができません)。メモ帳で開いたところ、PDFコンテンツの前にたくさんのHTMLレイアウトコードがありました...何が間違っているのですか?
Adobe Readerで、次のメッセージが表示されます。
サポートされているファイルタイプではないか、ファイルが破損しているなどの理由で、Adobe Readerは「filename.pdf」を開くことができませんでした。たとえば、電子メールの添付ファイルとして送信され、正しくデコードされませんでした。