【发布时间】:2014-07-06 08:31:35
【问题描述】:
我对@987654321@ 的理解是它在响应返回给客户端之后触发。
在我的艰难测试中,情况似乎并非如此。如果我将sleep(10) 放在 kernel.terminate 上调用的函数中。浏览器也会等待 10 秒。处理似乎在发送响应之前发生。
我在配置中有以下内容:
calendar:
class: Acme\CalendarBundle\Service\CalendarService
arguments: [ @odm.document_manager, @logger, @security.context, @event_dispatcher ]
tags:
- { name: kernel.event_subscriber }
我的订阅者类别:
class CalendarService implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return array(
'kernel.terminate' => 'onKernelTerminate'
);
}
public function onKernelTerminate()
{
sleep(10);
echo "hello";
}
}
更新
这似乎与 Symfony 未发送 Content-Length 标头有关。如果我生成它,响应会正确返回。
// app_dev.php
...
$kernel = new AppKernel('dev', true);
$kernel->loadClassCache();
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
// --- START EDITS ---
$size = strlen($response->getContent());
$response->headers->set('Content-Length', $size);
$response->headers->set('Connection', 'close');
// ---- END EDITS ----
$response->send();
$kernel->terminate($request, $response);
【问题讨论】:
-
这是 Symfony 中的错误还是有目的?