内部

编辑该页面

警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.4,不再维护。

这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。

内部

看起来像你想理解Symfony是如何工作的以及如何扩展它。ob娱乐下载这让我非常开心!本节是Symfony内部深入的解释。ob娱乐下载

请注意

你只需要阅读本节如果你想理解幕后Symfony是如何工作的,或者如果你想延长Symfony。ob娱乐下载

概述

Symfob娱乐下载ony的代码是由几个独立的层。每一层都是建立在前一个。

提示

半自动的不是直接管理的框架;这是通过使用作曲家的自动装卸机(供应商/ autoload.php),这是包含在app / autoload.php文件。

HttpFoundation组件

最深层次的HttpFoundation组件。HttpFoundation提供所需的主要对象来处理HTTP。这是一个面向对象的抽象一些原生PHP函数和变量:

  • 请求抽象类主要的PHP全局变量$ _GET,$ _POST,_COOKIE美元,带有_file美元,$ _SERVER;
  • 响应类抽象一些PHP函数头(),setcookie (),回声;
  • 会话类和SessionStorageInterface接口抽象的会话管理session_ * ()功能。

请注意

阅读更多关于HttpFoundation组件

HttpKernel组件

HttpFoundation是HttpKernel组件。HttpKernel HTTP处理动态的部分;这是一个基于请求和响应的瘦包装器类标准化处理请求的方式。它还提供了扩展点和工具,使其成为理想的起点,创建一个Web框架没有过多的开销。

也可以选择添加可配置性和可扩展性,多亏了DependencyInjection组件和一个强大的插件系统(包)。

另请参阅

阅读更多关于HttpKernel组件,依赖注入

FrameworkBundle

FrameworkBundle包的包关系的主要组件和库一起做成一个轻量级的和快速的MVC框架。它有一个合理的缺省配置和约定,以缓解学习曲线。

内核

HttpKernel类是中央类Symfony和负责处理客户端请求。ob娱乐下载其主要目标是“转换”请求对象一个响应对象。

每一个Symob娱乐下载fony内核实现了HttpKernelInterface:

1
函数处理(请求美元请求,美元类型= self:: MASTER_REQUEST,美元= true)

控制器

将请求响应,内核依赖于“控制器”。一个控制器可以是任何有效的PHP调用。

内核代表的选择应该执行控制器的实现ControllerResolverInterface:

1 2 3
公共函数getController(请求美元请求);公共函数getArguments(请求美元请求,美元控制器);

getController ()方法返回控制器(PHP调用)与给定的请求。默认的实现(ControllerResolver寻找一个_controller请求属性表示控制器名称(“class::法”字符串,如包\ BlogBundle \为PostController: indexAction)。

提示

默认实现使用RouterListener定义_controller请求属性(见内部)。

getArguments ()方法返回一个数组参数传递给控制器可调用的。默认实现自动解析方法参数,基于请求属性。

对于每个方法参数,Symfony试图得到一个请求属性ob娱乐下载的值具有相同的名字。如果没有定义,定义的参数使用默认值,如果:

1 2 3 4 5 6
/ /ob娱乐下载 Symfony将寻找一个“id”属性(强制)/ /一个“管理”(可选)公共函数showAction(美元id,美元管理= true){/ /……}

处理请求

处理()方法接受一个请求总是返回一个响应。将请求,处理()依赖的解析器和有序链事件通知(有关更多信息,请参见下一节关于每个事件):

  1. 在做任何其他事情之前,kernel.request事件通知,如果听众返回之一响应,它直接跳到步骤8;
  2. 调用解析器来确定控制器执行;
  3. 听众的kernel.controller事件现在可以操纵控制器可调用的他们想要的方式(改变它,把它,…);
  4. 内核检查控制器实际上是一个有效的PHP调用;
  5. 调用解析器来确定的参数传递给控制器;
  6. 内核调用控制器;
  7. 如果控制器不返回响应的听众kernel.view能控制器返回值转换为一个事件响应;
  8. 听众的kernel.response事件可以操纵响应(内容和标题);
  9. 返回的响应;
  10. 听众的kernel.terminate事件可以执行任务后反应。

如果抛出一个异常处理过程中,kernel.exception通知和听众有机会转换异常响应。如果工作,kernel.response事件通知;如果不是,re-thrown是个例外。

如果你不想例外被(例如嵌入式请求),禁用kernel.exception事件通过作为第三个参数处理()方法。

内部请求

在任何时间在处理一个请求(“大师”),sub-request可以处理。你可以通过请求类型处理()方法(第二个参数):

  • HttpKernelInterface: MASTER_REQUEST;
  • HttpKernelInterface: SUB_REQUEST

传递给所有事件和听众的类型是可以采取相应的(一些处理必须发生在主请求)。

事件

2.4

isMasterRequest ()方法是在Symfony 2.4中引入的。ob娱乐下载之前,getRequestType ()必须使用方法。

每个事件抛出由内核的一个子类KernelEvent。这就意味着每个事件访问相同的基本信息:

isMasterRequest ()

isMasterRequest ()方法允许听众检查请求的类型。例如,如果一个侦听器只能活跃的主人请求,添加下面的代码开始侦听器方法:

1 2 3 4 5 6
使用ob娱乐下载\组件\HttpKernel\HttpKernelInterface;如果(!美元事件- >isMasterRequest ()) {/ /立即返回返回;}

提示

如果您还不熟悉Symfony EventDispatcher,阅读ob娱乐下载EventDispatcher组件文档欧宝官网下载app第一个部分。

kernel.request事件

事件类:GetResponseEvent

这次活动的目的是返回一个响应对象立即或设置变量后,这样一个控制器可以被称为事件。任何侦听器都可以返回响应对象通过setResponse ()方法的事件。在这种情况下,所有其他听众不会叫。

这个事件被FrameworkBundle填充_controller请求属性,通过RouterListener。RequestListener使用RouterInterface对象匹配请求并确定控制器名称(存储在_controller请求属性)。

另请参阅

阅读更多的kernel.request事件

kernel.controller事件

事件类:FilterControllerEvent

这个事件不是FrameworkBundle所使用的,但是可以一个入口点用来修改控制器应该执行:

1 2 3 4 5 6 7 8 9 10
使用ob娱乐下载\组件\HttpKernel\事件\FilterControllerEvent;公共函数onKernelController(FilterControllerEvent美元事件){美元控制器=美元事件- >getController ();/ /……/ /控制器可以改变任何PHP调用美元事件- >setController (美元控制器);}

另请参阅

阅读更多的kernel.controller事件

kernel.view事件

事件类:GetResponseForControllerResultEvent

这个事件不是FrameworkBundle所使用的,但它可以用来实现子系统。这个事件被称为只有如果控制器返回一个响应对象。活动的目的是让其他返回值被转换成一个响应

控制器可以通过返回的值getControllerResult方法:

1 2 3 4 5 6 7 8 9 10 11 12
使用ob娱乐下载\组件\HttpKernel\事件\GetResponseForControllerResultEvent;使用ob娱乐下载\组件\HttpFoundation\响应;公共函数onKernelView(GetResponseForControllerResultEvent美元事件){美元瓦尔=美元事件- >getControllerResult ();美元响应=反应();/ /……一些自定义返回值的反应如何美元事件- >setResponse (美元响应);}

另请参阅

阅读更多的kernel.view事件

kernel.response事件

事件类:FilterResponseEvent

这次活动的目的是让其他系统修改或替换响应对象创建后:

1 2 3 4 5 6
公共函数onKernelResponse(FilterResponseEvent美元事件){美元响应=美元事件- >getResponse ();/ /……修改响应对象}

FrameworkBundle寄存器几个听众:

另请参阅

阅读更多的kernel.response事件

kernel.finish_request事件

事件类:FinishRequestEvent

这次活动的目的是处理任务,应该执行后,请求被处理,但不需要修改响应。事件监听器kernel.finish_request事件被称为成功的和异常情况。

kernel.terminate事件

事件类:PostResponseEvent

这次活动的目的是执行“重”任务后反应已经给客户端。

另请参阅

阅读更多的kernel.terminate事件

kernel.exception事件

事件类:GetResponseForExceptionEvent

FrameworkBundle注册一个ExceptionListener远期的请求给定控制器(的值exception_listener.controller参数,必须的class::方法符号)。

对这个事件侦听器可以创建并设置一个响应对象,创建并设置一个新的异常对象,或者什么都不做:

1 2 3 4 5 6 7 8 9 10 11 12 13 14
使用ob娱乐下载\组件\HttpKernel\事件\GetResponseForExceptionEvent;使用ob娱乐下载\组件\HttpFoundation\响应;公共函数onKernelException(GetResponseForExceptionEvent美元事件){美元异常=美元事件- >getException ();美元响应=反应();/ /设置基于捕获异常的响应对象美元事件- >setResponse (美元响应);/ /可以另外设置一个新的例外/ /美元异常= new \异常(一些特殊例外);/ /事件- > setException美元($除外);}

请注意

Symob娱乐下载fony确保响应状态代码设置为最合适的一个根据例外,设置状态的响应不能工作。如果你想覆盖状态代码(你不应该没有一个很好的理由),设置X-Status-Code标题:

1 2 3 4 5
返回响应(“错误”、响应::HTTP_NOT_FOUND,/ /忽略数组(“X-Status-Code”= >反应::并);

2.4

支持HTTP状态代码常数是在Symfony 2.4中引入的。ob娱乐下载

另请参阅

阅读更多的kernel.exception事件

的EventDispatcher

EventDispatcher是一个独立的组件,负责大部分的基本逻辑和流在Symfony的请求。ob娱乐下载有关更多信息,请参见EventDispatcher组件文档欧宝官网下载app

分析器

当启用时,Symfony分析器收集有ob娱乐下载用的信息对每个请求应用程序和存储供以后分析。在开发环境中使用分析器来帮助你调试你的代码,提高性能;在生产环境中使用它来探索问题后的事实。

你很少需要直接处理分析器等Symfony提供了可视化工具工具Web调试工具栏和网络分析器。ob娱乐下载如果你使用Symfony的标准ob娱乐下载版,分析器,web调试工具栏,和网络分析器都已经配置了合理的设置。

请注意

所有请求分析器收集信息(简单的请求,重定向,例外,Ajax请求,ESI请求;和所有HTTP方法和格式)。这意味着一个URL,您可以有几个相关的分析数据(每个外部请求/响应对一个)。

可视化分析数据

使用Web调试工具栏

在开发环境中,网络调试工具栏可以在所有页面的底部。它显示了一个很好的总结的分析数据,让您即时访问大量的有用的信息时并不像预期的那样工作。

如果提供的总结Web调试工具栏是不够的,点击标记链接(一个字符串由13随机字符)来访问网络分析器。

请注意

如果令牌没有点击,这意味着分析器路线不注册配置信息(见下文)。

分析与Web分析器分析数据

网络分析器是一个可视化的工具,用于分析数据,您可以使用在开发调试代码,提高性能;但它也可以用来探索在生产中出现的问题。它使所有信息收集的分析器在web界面。

访问配置信息

你不需要使用默认可视化工具来访问配置信息。但你怎么能检索分析信息后为一个特定的要求吗?分析器存储数据的请求时,它还将一个令牌与它;这个令牌是可用的X-Debug-TokenHTTP报头的反应:

1 2 3
美元配置文件=美元容器- >get (“分析工具”)- >loadProfileFromResponse (美元响应);美元配置文件=美元容器- >get (“分析工具”)- >loadProfile (美元令牌);

提示

当分析器但不启用web调试工具栏,或者当你想要一个Ajax请求的令牌,使用Firebug等工具的价值X-Debug-TokenHTTP报头。

使用find ()方法根据某些标准访问令牌:

1 2 3 4 5 6 7 8 9 10 11
/ /获得最新的10个令牌美元令牌=美元容器- >get (“分析工具”)- >找到(,,10,,);/ /获得最新的所有URL包含/ admin / 10令牌美元令牌=美元容器- >get (“分析工具”)- >找到(,“/ admin /”,10,,);/ /得到最新的10为当地的请求令牌美元令牌=美元容器- >get (“分析工具”)- >找到(“127.0.0.1”,,10,,);/ /获得最新的10之间发生的令牌请求2和4天前美元令牌=美元容器- >get (“分析工具”)- >找到(,,10,4天前的,2天前的);

如果你想操作分析数据在不同的机器上的信息生成,使用export ()进口()方法:

1 2 3 4 5 6
/ /在生产机器美元配置文件=美元容器- >get (“分析工具”)- >loadProfile (美元令牌);美元数据=美元分析器- >出口(美元配置文件);/ /在开发机器上美元分析器- >导入(美元数据);

配置

默认的Symfony分析ob娱乐下载器配置有合理的设置,网络调试工具栏,和网络分析器。这是例如开发环境的配置:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8
#加载分析器框架:分析器:{only_exceptions:}#启用网络分析器web_profiler:工具栏:真正的intercept_redirects:真正的

only_exceptions被设置为真正的时,分析器只收集数据由应用程序抛出异常。

intercept_redirects被设置为真正的网络分析器拦截,重定向,使你有机会看看之前收集到的数据重定向。

如果你启用网络分析器,你还需要挂载分析器路线:

  • YAML
  • XML
  • PHP
1 2 3
_profiler:资源:“@WebProfilerBundle /资源/ config /路由/ profiler.xml”前缀:/ _profiler

分析器增加一些开销,您可能想要使它只在某些情况下,在生产环境中。的only_exceptions设置限制分析例外,但是如果你想获得信息时,客户端IP来自一个特定的地址,或在有限的部分网站?您可以使用一个分析器匹配器,更多的了解,在“如何使用匹配器使分析器有条件吗”。

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。