将视图渲染到CakePHP 1.3中的变量(生成pdf和下载文件)

时间:2013-01-10 11:11:36

标签: cakephp cakephp-1.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'输出也会发送到浏览器。

永远不会下载该文件。

有关如何解决这个问题的想法吗?

3 个答案:

答案 0 :(得分:1)

简单的解决方法是在第一次render()调用后将$ this->输出设置为''。

更正确的方法是使用requestAction()而不是render()。

答案 1 :(得分:0)

在CakePHP 2.x中,为了使用视图生成条形码标签格式,我执行了以下操作:

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

这给了我作为$ body的视图数据。然后我可以重定向或者如果请求是ajax,只需将autoRender设置为false并返回''。

MVC水域有点混乱,但很简单。

答案 2 :(得分:0)

您只需在self_evaluation_pdf.ctp

中编写以下代码即可
  header("Content-Disposition: attachment; filename='downloaded.pdf'");
  header('Content-type: application/pdf');

此视图中的动态内容将作为PDF文件下载到客户端。