内部
编辑该页面警告:你浏览的文档欧宝官网下载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 ()方法返回一个数组参数传递给控制器可调用的。默认实现自动解析方法参数,基于请求属性。
处理请求
的处理()方法接受一个请求
和总是返回一个响应
。将请求
,处理()
依赖的解析器和有序链事件通知(有关更多信息,请参见下一节关于每个事件):
- 在做任何其他事情之前,
kernel.request
事件通知,如果听众返回之一响应
,它直接跳到步骤8; - 调用解析器来确定控制器执行;
- 听众的
kernel.controller
事件现在可以操纵控制器可调用的他们想要的方式(改变它,把它,…); - 内核检查控制器实际上是一个有效的PHP调用;
- 调用解析器来确定的参数传递给控制器;
- 内核调用控制器;
- 如果控制器不返回
响应
的听众kernel.view
能控制器返回值转换为一个事件响应
; - 听众的
kernel.response
事件可以操纵响应
(内容和标题); - 返回的响应;
- 听众的
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。这就意味着每个事件访问相同的基本信息:
- getRequestType ()——返回类型的请求(
HttpKernelInterface: MASTER_REQUEST
或HttpKernelInterface: SUB_REQUEST
); - isMasterRequest ()——检查如果是主请求;
- getKernel ()——返回内核处理请求;
- getRequest ()返回当前
请求
被处理。
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
事件
这个事件不是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
事件
这次活动的目的是让其他系统修改或替换响应
对象创建后:
1 2 3 4 5 6
公共函数onKernelResponse(FilterResponseEvent美元事件){美元响应=美元事件- >getResponse ();/ /……修改响应对象}
FrameworkBundle寄存器几个听众:
- ProfilerListener:为当前请求收集数据;
- WebDebugToolbarListener:注入Web调试工具栏;
- ResponseListener:修复了响应
内容类型
基于请求的格式; - EsiListener:添加一个
Surrogate-Control
需要解析HTTP头当响应为ESI标签。
另请参阅
阅读更多的kernel.response事件。
kernel.finish_request
事件
这次活动的目的是处理任务,应该执行后,请求被处理,但不需要修改响应。事件监听器kernel.finish_request
事件被称为成功的和异常情况。
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-Token
HTTP报头的反应:
1 2 3
美元配置文件=美元容器- >get (“分析工具”)- >loadProfileFromResponse (美元响应);美元配置文件=美元容器- >get (“分析工具”)- >loadProfile (美元令牌);
提示
当分析器但不启用web调试工具栏,或者当你想要一个Ajax请求的令牌,使用Firebug等工具的价值X-Debug-Token
HTTP报头。
使用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来自一个特定的地址,或在有限的部分网站?您可以使用一个分析器匹配器,更多的了解,在“如何使用匹配器使分析器有条件吗”。