Symfony2:发送响应后强制停止代码执行 headers

Symfony2: force stop code execution after sendiing Response headers

发送响应 headers 但不使用 exit() 后停止代码执行的正确方法是什么?

我知道脚本应该 return 一个响应,但我如何才能强制它从控制器外部 return 编辑,例如从服务?

假设我的服务方法 return 以这种方式响应:

return RedirectResponse($url)->send();

但在另一个地方它可以return其他东西。所以我能做的就是检查它实际上做了什么 return:

$result = $myService->doSomething();
if ($result instanceof RedirectResponse) {
    return $result;
}

我想要实现的是避免在我使用我的服务的每个地方检查结果类型,但我想在 Profiler/logs 中看到 returned 响应(如果我使用 exit () 我不能)。

有没有办法强制内核终止?


编辑:

实际上该服务在任何控制器之前的事件中使用,所以我想在任何控制器执行之前进行重定向。那么也许是一种省略控制器执行的方法?

A controller is a PHP callable you create that takes information from the HTTP request and creates and returns an HTTP response (as a Symfony Response object).

Controller 唯一关心的是处理请求和 return 响应。让服务处理响应对象可能是一个糟糕的设计选择。

在任何情况下,您都可以 die/exit 您的控制器并使用内核事件挂钩 Request/Response 流程并检查 returned 响应。终止事件可能是正确的选择 http://symfony.com/doc/current/components/http_kernel/introduction.html

好的,我找到了一种方法。我所要做的就是在退出之前终止内核 - 它会分派所有响应后事件(如分析、日志记录等)。

$response = new RedirectResponse($url);
$response->send();
$kernel->terminate($request, $response);
exit();

如果有人找到更好的方法,请回答,以便我切换标记。