我正在动态创建一个pdf文件并将其发送到客户端:
private function createPdf($foo)
{
//Delete pdf file if it exists
if(file_exists('path_to_directory' . $foo->getId() . '.pdf'))
unlink('path_to_directory' . $foo->getId() . '.pdf');
//Create new pdf file
$this->get('knp_snappy.pdf')->generateFromHtml(
$this->renderView(
'AcmeFooBundle:Default:pdfTemplate.html.twig', array(
'foo' => $foo)
),
'path_to_directory' . $foo->getId() . '.pdf'
);
// open the file in a binary mode
$fp = fopen('path_to_directory' . $foo->getId() . '.pdf', 'rb');
header("Content-Type: application/pdf");
header('Content-Disposition: attachment; filename="foo.pdf"');
// dump the picture and stop the script
fpassthru($fp);
exit;
}
此功能正常,但我希望在将文件发送到客户端后呈现“成功”模板并将其发送到客户端后继续执行。我尝试过删除exit;
和Continue execution after calling php passthru() function之类的内容,但没有成功。任何的想法?
答案 0 :(得分:1)
实现了将Javascript事件添加到文件生成按钮:
纯JS:
<script>
window.onload = function() {
function redirectToMeeting() {
window.setTimeout(function() {
window.location.href="url_to_go";
}, 2000);
}
if(document.getElementsByClassName('create-file-button')) {
document.getElementsByClassName('create-file-button')[0].addEventListener('click', redirectToMeeting);
}
};
</script>
然后,单击该按钮时,将创建新文件并将其发送到客户端,然后(2秒后)将客户端重定向到url_to_go
。
<强> JQuery的:强>
$(function(){
$('#create-file-button').submit(function(ev) {
$("#continue").show();
});
});
提交表单后,系统会显示一个新按钮(#continue
),让用户转到下一页(url_to_go
)。