将文件发送到客户端后继续执行

时间:2014-06-23 12:25:27

标签: php symfony

我正在动态创建一个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之类的内容,但没有成功。任何的想法?

1 个答案:

答案 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)。