Symfony 2.7 从 StreamedResponse 的回调中设置 header

Symfony 2.7 set header from StreamedResponse's callback

我必须将 Content-Type 动态设置到 StreamedResponse 的回调中。

我写了这样的代码,它在 Symfony 2.3 上运行良好,但在 2.7 上运行不正常。返回的 Content-Type 是 text/html.

function indexAction()
{
    $r = new \Symfony\Component\HttpFoundation\StreamedResponse();
    $r->setCallback(function() use ( & $r)
    {
        // ...

        $r->headers->set('Content-Type', 'application/json');

        // ...
    });
    return $r;
}

我发现这个提交可以,但我不太明白... https://github.com/symfony/http-foundation/commit/6a0838a26d54eff153b825e1550c1f6fa05a0941

看来我们现在只能在回调外设置header。

如果我将带有本机 php 函数的 headers 发送到闭包中,它会起作用,但它很脏...

header('Content-Type: application/json');

如果有人有线索...

谢谢!

当您需要 long-polling 连接时,为您的目的而创建的流式响应。因此,在发送任何数据之前,您必须知道 content-type 它将提供什么服务。

当你return你的响应object在行动时Symfony已经发送headers并开始从回调函数stream输出。这个时候再发一个header.

是不对的

P.S。我从未见过您真正需要 StreamedResponse 并且需要动态设置 Content-Type 的情况。

准确地说,您可以使用 hack 替换 headers 到版本 2.7.19,它已合并到 2.7.20

正如@MichaelSivolobov 在他的回答中所说,我也从未见过您需要它的情况

我确信这样的提交总是为了强制执行更好的应用程序设计。当我看到你的例子中的这种情况时,重新考虑 code/data 流

是某种危险信号