我正在尝试为变量渲染视图。 然后,此变量将用于生成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'输出也会发送到浏览器。
永远不会下载该文件。
有关如何解决这个问题的想法吗?
答案 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文件下载到客户端。