Symfony Http Kernel Component简介
Posted symfony研习社
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Symfony Http Kernel Component简介相关的知识,希望对你有一定的参考价值。
HttpKernel 简介
Symfony HttpKernel componet,提供了一个结构化的处理流程, 通过使用 EventDispatcher component 以事件驱动的方式,将 Request 转化为Response。
工作流程
Symfony Request 请求流程
用户在浏览器输入一个链接
浏览器向服务器发起请求
Symfony 向Applicaiton 提供一个Request 实体
Application 通过Request 生成一个Response
Server 将Response 返回给浏览器
浏览器将 资源呈现给用户
内部实现
Component 提供了一个接口,来规范请求开始到response的创建。
namespace Symfony\Component\HttpKernel;
use Symfony\Component\HttpFoundation\Request;
interface HttpKernelInterface
{
// ...
/**
* @return Response A Response instance
*/
public function handle(
Request $request,
$type = self::MASTER_REQUEST,
$catch = true
);
}
流程图
流程事件
kernel.request event
可以在此为request添加信息,或者直接返回response,如果,返回response,处理流程将直接跳到kernel.response.
例如Security lister 因为用户没有验证, 在此直接返回 403;
Routerlintener 在此通过处理request,决定将请求交给哪个controller去渲染;Resolve the controller
通过request 返回一个可以执行的php controller
namespace Symfony\Component\HttpKernel\Controller;
use Symfony\Component\HttpFoundation\Request;
interface ControllerResolverInterface
{
public function getController(Request $request);
}
kernel.controller.event
确定controler之后,你可以在此事件中初始化东西,或者改变要执行的controller (ControllerEvent::setController )
获取controller arguments
通过调用ArgumentResolverInterface::getArguments() 获取Controller 需要的参数
调用controller
kernel.view event
将返回值转化为一个response对象
kernel.response.event
在发送response之前,对response对象进行修改
kernel.terminate.event
response发送给用户后,在此你可以处理一些耗时的工作,内部通过(fastcgi_finish_request)
Handing Exception: the kernel.exception
事件简介
名称 | 事件常量 | 传递给lintener参数 |
---|---|---|
kernel.request | KernelEvents::REQUEST | RequestEvent |
kernel.controller | KernelEvents::CONTROLLER ControllerEvent | |
kernel.controller_arguments | ControllerArgumentsEvent | |
kernel.view | KernelEvents::VIEW | ViewEvent |
kernel.response | KernelEvents::RESPONSE | ResponseEvent |
kernel.finish_request | KernelEvents::FINISH_REQUEST | FinisheRequestEvent |
kernel.terminate | KernelEvents::TERMINATE | TerminateEvent |
kernel.exception | KernelEvents::EXCEPITON | ExceptionEvent |
参考链接
以上是关于Symfony Http Kernel Component简介的主要内容,如果未能解决你的问题,请参考以下文章
Symfony 3 功能测试错误(KERNEL_DIR 或 WebTestCase)
Symfony 2中的kernel.request事件中的身份验证令牌始终为空?
带有授权检查器的 Symfony kernel.response 监听器
如何解决 Symfony2 中的“无法创建“%kernel.root_dir%/../web/uploads”目录”错误