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 流
是某种危险信号
我必须将 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 流
是某种危险信号