内置Symfonyob娱乐下载事件
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 4.1,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
内置Symfonyob娱乐下载事件
在处理HTTP请求期间,Symfony框架(或任何使用ob娱乐下载HttpKernel组件)分派一些事件您可以使用它来修改处理请求的方式。
内核事件
HttpKernel组件分派的每个事件都是KernelEvent,提供以下资料:
- getRequestType ()
-
返回类型的要求(
HttpKernelInterface: MASTER_REQUEST
或HttpKernelInterface: SUB_REQUEST
). - getKernel ()
- 返回处理请求的内核。
- getRequest ()
-
返回当前
请求
被处理。
kernel.request
事件类:GetResponseEvent
在Symfony中,此事件在确定控制器之前非常早地分派。ob娱乐下载向Request中添加信息或提前返回Response以停止对请求的处理是很有用的。
另请参阅
阅读更多有关kernel.request事件.
执行这个命令来找出哪些监听器为这个事件注册了,以及它们的优先级:
1
$PHP bin/控制台调试:event-dispatcher kernel.request
kernel.controller
此事件在要执行的控制器被解析后,但在执行控制器之前分派。初始化控制器稍后需要的东西是很有用的,例如param转换器,甚至完全改变控制器:
1 2 3 4 5 6 7 8 9
使用ob娱乐下载\组件\HttpKernel\事件\FilterControllerEvent;公共函数onKernelController(FilterControllerEvent$事件){/ /……//控制器可以更改为任何PHP可调用对象$事件->setController ($myCustomController);}
另请参阅
阅读更多有关kernel.controller事件.
执行这个命令来找出哪些监听器为这个事件注册了,以及它们的优先级:
1
$PHP bin/控制台调试:event-dispatcher kernel.controller
kernel.view
事件类:GetResponseForControllerResultEvent
此事件在控制器执行后被分派,但是只有如果控制器有不返回一个响应对象。将返回值(例如带有HTML内容的字符串)转换为响应
Symfony需要的对象:ob娱乐下载
12 3 4 5 6 7 8 9 10 11 12
使用ob娱乐下载\组件\HttpKernel\事件\GetResponseForControllerResultEvent;使用ob娱乐下载\组件\HttpFoundation\响应;公共函数onKernelView(GetResponseForControllerResultEvent$事件){$价值=$事件->getControllerResult ();$响应=新反应();/ /……以某种方式从返回值定制响应$事件->setResponse ($响应);}
另请参阅
阅读更多有关kernel.view事件.
执行这个命令来找出哪些监听器为这个事件注册了,以及它们的优先级:
1
$PHP bin/控制台调试:event-dispatcher kernel.view
kernel.response
此事件在控制器或任何事件之后被分派kernel.view
监听器返回一个响应
对象。在发送回响应之前修改或替换响应是很有用的(例如,添加/修改HTTP报头,添加cookie等):
1 2 3 4 5 6
公共函数onKernelResponse(FilterResponseEvent$事件){$响应=$事件->getResponse ();/ /……修改响应对象}
另请参阅
阅读更多有关kernel.response事件.
执行这个命令来找出哪些监听器为这个事件注册了,以及它们的优先级:
1
$PHP bin/控制台调试:event-dispatcher kernel.response
kernel.finish_request
事件之后分派此事件子请求已经完成了。重置应用程序的全局状态是很有用的(例如,翻译器监听器将翻译器的locale重置为父请求之一):
1 2 3 4 5 6 7 8 9
公共函数onKernelFinishRequest(FinishRequestEvent$事件){如果(零= = =$parentRequest=$这->requestStack->getParentRequest ()) {返回;}//将子请求的语言环境重置为父请求的语言环境$这->setLocale ($parentRequest);}
执行这个命令来找出哪些监听器为这个事件注册了,以及它们的优先级:
1
$PHP bin/控制台调试:event-dispatcher kernel.finish_request
kernel.terminate
方法的执行之后,在发送响应之后分派此事件处理()方法)。执行缓慢或复杂的任务(例如发送电子邮件)是很有用的,这些任务不需要完成来发送响应。
另请参阅
阅读更多有关kernel.terminate事件.
执行这个命令来找出哪些监听器为这个事件注册了,以及它们的优先级:
1
$PHP bin/控制台调试:event-dispatcher kernel.terminate
kernel.exception
事件类:GetResponseForExceptionEvent
在处理HTTP请求期间,一旦发生错误,就立即分派此事件。从错误中恢复或修改作为响应发送的异常详细信息非常有用:
12 3 4 5 6 7 8 9 10 11 12 13 14
使用ob娱乐下载\组件\HttpKernel\事件\GetResponseForExceptionEvent;使用ob娱乐下载\组件\HttpFoundation\响应;公共函数onKernelException(GetResponseForExceptionEvent$事件){$异常=$事件->getException ();$响应=新反应();//根据捕获的异常设置响应对象$事件->setResponse ($响应);//你也可以设置一个新的异常// $exception = new \ exception('一些特殊异常');/ /事件- > setException($除外);}
请注意
TwigBundle注册了一个ExceptionListener这将转发请求
控件定义的给定控制器exception_listener.controller
参数。
ob娱乐下载Symfony使用以下逻辑来确定响应的HTTP状态代码:
- 如果isClientError (),isServerError ()或isRedirect ()是真的,那你身上的状态码
响应
对象使用; - 如果原始异常实现HttpExceptionInterface,然后
getStatusCode ()
在异常上调用并使用(来自getHeaders ()
还添加); - 如果以上两种情况都不成立,则使用500状态码。
请注意
如果您想覆盖异常响应的状态代码(如果没有充分的理由,您不应该这样做),请调用GetResponseForExceptionEvent: allowCustomResponseCode ()
首先,然后在响应上设置状态代码:
1 2 3
$事件->allowCustomResponseCode ();$响应=新响应(没有内容的,204);$事件->setResponse ($响应);
在上面的例子中,发送给客户端的状态代码将是204
.如果事件- > allowCustomResponseCode ()
,则内核将根据抛出的异常类型设置适当的状态代码。
另请参阅
阅读更多有关kernel.exception事件.
执行这个命令来找出哪些监听器为这个事件注册了,以及它们的优先级:
1
$PHP bin/控制台调试:event-dispatcher kernel.exception