天天看点

Symfony学习--HttpKernel组件1 处理request2 解析controller3 处理controller4 获取controller参数5 实际调用controller6 view7 kernel.response 事件8 kernel.terminate事件异常处理:

<a href="http://symfony.com/doc/2.1/components/http_kernel/introduction.html">http://symfony.com/doc/2.1/components/http_kernel/introduction.html</a>

httpkernel这个类提供的功能说白了就是将request转换成response。它使用一个流程的工作流似的方式。

整个流程图大致如下:

Symfony学习--HttpKernel组件1 处理request2 解析controller3 处理controller4 获取controller参数5 实际调用controller6 view7 kernel.response 事件8 kernel.terminate事件异常处理:

httpkernel最核心的是handle(); 它的工作就是将上图的request转换成response。

handle()是由事件驱动的,你可以建立一系列的事件监听

典型的代码如下:

Symfony学习--HttpKernel组件1 处理request2 解析controller3 处理controller4 获取controller参数5 实际调用controller6 view7 kernel.response 事件8 kernel.terminate事件异常处理:

步骤:

一个request可以有多个listener,listener可能直接中断,并且直接返回response。

这里有个controllerresolver类来对controller进行解析,它有两个接口:

getcontroller

getarguments

如果你要自定义这个解析类,你就需要自己实现这两个接口。

初始化,并且在实际执行前改变对应的控制器

通过getarguments()这个方法来获取controller的参数

这个阶段会实际调用controller了,并得到返回的数据

这个阶段就是mvc的view层。将controller中返回的数据加上view层

在数据返回前改变对应的response事件。

在数据返回给用户前处理一些较重的事件。

是触发了kernel.exception事件

每个异常都返回了一个getresponseforexceptionevent事件,你可以使用getexception()方法获取原始的异常。