动态路由器
编辑该页面动态路由器
Symfob娱乐下载ony的默认路由器开发处理静态路由定义,因为他们通常配置文件中声明,之前执行。完整的路由配置是在构造函数注入。然后创建一个UrlMatcher这个配置,而不是匹配器注射服务。这使得定义的默认路由器一个可怜的选择来处理动态路线。处理大量的用户创建的路线,该组件包含dynamicroute
配置一个RequestMatcherInterface或UrlMatcherInterface服务。实际的匹配逻辑取决于底层的匹配器实现你选择。你可以使用你自己的匹配策略通过它dynamicroute
构造函数。作为该组件的一部分,NestedMatcher已经提供。
dynamicroute进一步允许修改路由的结果参数匹配,使用一组RouteEnhancerInterface
可以很容易地配置。
的dynamicroute
也能够生成url的路线
对象。的ProviderBasedGenerator
可以生成的url加载RouteProviderInterface
实例。的ContentAwareGenerator
可以确定的路线
从任何内容生成的URL对象实现RouteReferrersInterface
,这意味着您可以生成一个URL直接从一个内容对象。
事件
可选地,您可以提供一个事件调度器动态路由器。如果你这样做,它会触发一个赛前事件在比赛过程中,这取决于方法和另一个事件生成URL:
- cmf_routing.pre_dynamic_match(派出的开头
匹配
方法) - cmf_routing.pre_dynamic_match_request(派出的开头
matchRequest
方法。在Symfony完整的堆栈框架的背景下,只会ob娱乐下载触发此事件。) - cmf_routing.pre_dynamic_generate(派出的开头
生成
方法)
赛前的事件类ob娱乐下载
,生成的事件是类ob娱乐下载
。生成事件还允许您操作路线名称、参数和引用类型的事件,通过更新事件中的值。
的ob娱乐下载
类包含常量。学习如何注册事件,请参阅“如何创建一个事件侦听器_”核心文档。欧宝官网下载app
匹配器
动态路由器需要注射RequestMatcherInterface或者一个UrlMatcherInterface。此组件提供一个合适的实现的NestedMatcher。
路线增强剂
可选地,和匹配过程后,一组RouteEnhancerInterface
可以应用的实例dynamicroute
。路线增强剂是一种操作前的参数匹配的路由框架仍在继续。他们可以被使用,例如,动态地分配一个控制器或保持逻辑的控制器通过确定参数或“向上转型”请求参数对应的对象。
该组件已经提供了一些通用的增强剂。他们都遵循的原则不会改变现有字段只添加字段如果不存在:
-
RouteContentEnhancer
-
如果路线的一个实例
RouteObjectInterface
,增强器设置目标字段的返回值getContent ()
。 -
FieldMapEnhancer
- 配置一个键-值映射。如果一个匹配的指定的字段包含一个关键,目标字段设置为值。
-
FieldByClassEnhancer
-
配置的类名映射到值。如果指定的字段包含一个对象是一个类的实例的地图,设置目标字段对应的值。注意,第一场比赛,对象应该不止一个类的实例。该增强剂例如用于确定控制器和基于类的模板文档的内容。这个增强器相似
FieldMapEnhancer
,但做一个运算符检查而不是映射键的字符串比较。 -
FieldPresenceEnhancer
- 如果一个字段出现在路线匹配,一个其他字段设置为指定的值,如果该字段没有设置。
-
ContentRepositoryEnhancer
-
如果源字段出现在路线匹配,目标字段设置为返回的内容
ContentRepositoryInterface
源字段的值,如果目标字段尚未设置。
您还可以创建自己的路线增强器通过创建一个类的实现ob娱乐下载
。
注册增强剂使用addRouteEnhancer
方法,它有一个可选的第二个参数提供优先级。
路线增强器编译器通过
此组件提供了一个RegisterRouteEnhancersPass
。如果你使用ob娱乐下载Symfony依赖注入组件,您可以使用该编译器通过注册所有增强剂与动态路由器有一个特定的标签:
1 2 3 4 5 6 7 8
使用ob娱乐下载\Cmf\组件\路由\DependencyInjection\编译器\RegisterRouterEnhancersPass;使用ob娱乐下载\组件\DependencyInjection\ContainerBuilder;/ /一个ContainerBuilder美元容器=……;美元通过=新RegisterRouterEnhancersPass (“cmf_routing.dynamic_router”,“dynamic_router_route_enhancer”);美元容器- >addCompilerPass (美元通过);
添加过后和配置容器建造者,你继续编译容器的解释ob娱乐下载Symfony DI组件编译部分。
您可以配置动态路由服务名称。编译器通过将修改这个服务定义寄存器增强剂时动态加载路由器从容器中。如果没有指定,默认的服务名称cmf_routing.dynamic_router
。
您还可以配置标记名称你想使用编译器通过构造函数的第二个参数。如果你不,默认的标签dynamic_router_route_enhancer
。如果您正在使用ob娱乐下载Symfony CMF RoutingBundle,这个标签已经积极使用默认名称。
连接一个路线的内容
根据您的应用程序的逻辑,一个请求的URL可能有一个关联的内容对象。这样一个URL可能实现的途径RouteObjectInterface
如果存在返回一个内容对象。如果你配置RouteContentEnhancer
,它会插入对象到匹配数组的内容_content
关键。请注意,一个路线
可能会实现RouteObjectInterface
但在某些情况下不返回任何模型实例。在这种情况下,_content
字段将不会设置。
此外,路线,实现该接口还可以提供一个定制的路线名称。返回的关键getRouteKey
将被用作路线Symfony的名称而不是核心兼容路线名称,可以包含任何字符。ob娱乐下载例如,这允许您设置一个路径作为路由名称。两个UrlMatchers提供NestedMatcher
取代_route
关键路线的实例并把所提供的名字_route_name
。
所有航线仍然需要扩展基类ob娱乐下载Symfony组件\ \ \ \ \ \路由路径Symfony的组ob娱乐下载件。
重定向
您可以创建通过实现的重定向RedirectRouteInterface
。它可以重定向到一个绝对URI,路线名称可以由任何链中的路由器或到另一个地方路线
对象。
请注意,实际的重定向逻辑不是由包处理。你应该实现你自己的逻辑来处理重定向。例如重定向下完整的Symfony堆栈的实现,请参考ob娱乐下载的RoutingBundle。
生成的url
除了匹配传入请求的一组参数,路由器还负责生成的URL路由及其参数。的ChainRouter
遍历其已知的路由器,直到其中一个是能够产生一个匹配的URL。
旁边RequestMatcherInterface
和UrlMatcherInterface
匹配一个请求/ URL对应参数,dynamicroute
还使用了一个UrlGeneratorInterface
实例,允许它生成一个URL的路线。
发电机的方法是这样的:
1
公共函数生成(字符串美元的名字数组,美元参数= [],int美元referenceType= self:: ABSOLUTE_PATH);
在Syob娱乐下载mfony的核心,所有的路线是用名称来标识的。CMF路由也可以从路由对象生成的url。随着美元的名字
必须是一个字符串,特别cmf_routing_object
必须使用名称和路由实例被传递的参数与关键_route_object
。
的ProviderBasedGenerator
扩展Symfonob娱乐下载y的默认UrlGenerator(反过来,实现UrlGeneratorInterface),要求线路供应商找到路线根据名称和参数。然后让核心逻辑生成的URL路线
。
CMF组件还包括ContentAwareGenerator
,扩展了ProviderBasedGenerator
,检查_route_object
参数是一个对象实现RouteReferrersReadInterface
。如果是,它得到了路线
从这个对象中。使用ContentAwareGenerator
为您的内容,您可以生成url在三个方面:
- 通过一个
路线
对象作为_route_object
参数 - 或通过
RouteReferrersInterface
对象是你的内容_route_object
参数 - 或提供的实现
ContentRepositoryInterface
并通过内容对象的id作为参数content_id
和cmf_routing_object
美元的名字。
如果你想实现自己的发电机,实现VersatileGeneratorInterface
得到更好的调试消息路由时不能生成。