3

ビューを変数にレンダリングしようとしています。この変数は、PDFを生成するために使用されます。次に、そのpdfをメディアビューとともにダウンロードする必要があります。

これが私のコントローラーコードです:



        $dir = ROOT . '/app/tmp/evaluationpdf/';
        $path = $dir . $evaluationid . '.pdf';

        $evaluation = $this->SelfEvaluation->find('first', array(
            'conditions' => array('SelfEvaluation.id' => $evaluationid),
            'contain' => array('Submission' => array('Application'), 'Applicant', 'Member')));

        $this->set(compact('evaluation'));
        $this->output = '';
        $this->layout = false;
        $html = $this->render('/elements/self_evaluation_pdf');

        $this->_generate_pdf($html, $path);

        $this->view = 'Media';

        $params = array(
                'id' => $evaluationid . '.pdf',
                'name' => $evaluationid,
                'download' => true,
                'extension' => 'pdf',
                'path' => $dir,
        );

        $this->set($params);

ファイルは正常に作成されますが、最初の「$this->render」出力もブラウザに送信されます。

ファイルがダウンロードされることはありません。

これを修正する方法について何かアイデアはありますか?

4

3 に答える 3

1

簡単な修正は、最初の render() 呼び出しの後に $this->output を '' に設定することです。

より正しい方法は、render() の代わりに requestAction() を使用することです。

于 2013-01-12T09:35:40.057 に答える
0

CakePHP 2.x では、ビューを使用してバーコード ラベル形式を生成するために次のことを行いました。

      $response = $this->render('/Labels/' . $printer['Printer']['model'] . '/manifest', 'ajax');
      $body = $response->body();
      $response->body('');

これにより、ビューデータが $body として表示されました。次に、リダイレクトするか、リクエストが ajax の場合は autoRender を false に設定して '' を返すことができます。

それはMVCの水域を濁らせますが、単純です。

于 2013-01-10T15:59:23.763 に答える
0

以下のコードを self_evaluation_pdf.ctp に記述するだけです。

  header("Content-Disposition: attachment; filename='downloaded.pdf'");
  header('Content-type: application/pdf');

このビューの動的コンテンツは、クライアント側で PDF ファイルとしてダウンロードされます。

于 2013-01-12T07:07:47.027 に答える