Laravel和输出缓冲

时间:2014-11-28 21:34:06

标签: ajax laravel output-buffering

我在laravel 4中遇到输出缓冲问题。 这段代码在其他框架中运行良好,但在laravel中我为ob_get_flush()

导致致命错误
class Ajax
{
    public function __construct()
    {
        if ( Request::ajax() )
        {
            ob_clean();
            ob_start(function(){});
            register_shutdown_function(array(&$this,'setOutput'));

        }

    }

    public function setOutput()
    {
        $html = ob_get_flush();
    }

}

错误:

ob_get_flush(): failed to delete and flush buffer. No buffer to delete or flush

3 个答案:

答案 0 :(得分:2)

看起来你正试图在ob_start()编辑之前冲洗。

答案 1 :(得分:1)

它"只是"通知,而不是错误。您的缓冲区内容为空,因此PHP(通过laravel)向您发送通知,因为它与ob_get_flush无关。也许在您尝试的其他框架中禁用通知。根据{{​​3}},你可以做这样的事情,如果你想让它工作,即使你的缓冲区是空的:

public function setOutput()
{
     if (ob_get_level() > 1) $html = ob_get_flush();
}

希望它会有所帮助!

答案 2 :(得分:0)

在Request :: ajax()返回true之前是否可能调用该类?

如果是这样,那么你的构造函数条件将返回false并且不会调用ob_start。也许您可以将该部分移出条件或尝试将其重写到您将数据写入对象的位置,然后调用renderOutput(),此方法将以正确的顺序调用ob。