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”目录”错误

yaml/symfony2:覆盖配置

在命令 symfony 3.4 上获取项目目录