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();
如果有人找到更好的方法,请回答,以便我切换标记。
发送响应 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();
如果有人找到更好的方法,请回答,以便我切换标记。