NestedMatcher
编辑该页面NestedMatcher
所提供的RequestMatcherInterface
实现是NestedMatcher
。它是适合使用dynamicroute,它使用多个步骤匹配过程来确定结果从一个给定的路由参数请求。
的NestedMatcher
使用一个3步骤匹配过程来确定使用哪个路线在处理当前请求:
- 问
RouteProviderInterface
收集的路线
实例匹配的潜在请求
; - 应用所有
RouteFilterInterface
过滤这个集合; - 让
FinalMatcherInterface
实例决定之间的最佳匹配路线
实例并将其转换为参数数组。
1。的RouteProvider
虽然RouteProviderInterface
可以用在其他方面,它的主要目标是很容易实现的教义PHPCR ODM或任何其他数据库,有效地允许您动态地从数据库存储和管理路线。
基于请求
,NestedMatcher
将检索的有序集合路线
对象从提供者的路线。这个供应商的想法是提供所有可能匹配路线,但是不任何复杂的匹配操作——这将在以后的步骤完成。
提示
的RoutingBundle提供了所有需要实现此组件运行与教义PHPCR-ODM以及教条ORM。
提示
此组件提供了候选人
实现的第一步,分裂的URL/
允许与变量模式匹配。
创建并注册自己的路线提供者,创建一个类实现ob娱乐下载
这将有以下方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
使用ob娱乐下载\Cmf\组件\路由\RouteProviderInterface;使用ob娱乐下载\组件\路由\RouteCollection;使用ob娱乐下载\组件\路由\异常\RouteNotFoundException;类DoctrineOrmRouteProvider实现了RouteProviderInterface{/ /……公共函数getRouteCollectionForRequest(请求美元请求){/ /你应该做一些简单的过滤URL美元路线=美元这- >routeRepository- >findAll ();美元集合=新RouteCollection ();foreach(美元路线作为美元路线){美元集合- >add (美元路线- >getName (),美元路线);}返回美元集合;}公共函数getRouteByName(美元的名字,美元参数=数组()){美元路线=美元这- >routeRepository- >findByName (美元的名字);如果(!美元路线){扔新RouteNotFoundException (“没有发现路由路径名称美元”);}返回美元路线;}公共函数getRoutesByNames(美元的名字,美元参数=数组()){返回美元这- >routeRepository- >createQueryBuilder (“r”)- >(在哪里“r.name(名称):“)- >setParameter (:名字的,“””.implode (“”、“”,美元的名字。“””))- >getQuery ()- >getResult ();}}
路线提供者将使用构造函数的第一个参数NestedMatcher
:
1 2 3 4 5
使用ob娱乐下载\Cmf\组件\路由\NestedMatcher\NestedMatcher;/ /……美元routeProvider=新DoctrineOrmRouteProvider (…);美元nestedMatcher=新NestedMatcher (美元routeProvider,……);
2。过滤器的路线
的NestedMatcher
可以应用用户提供RouteFilterInterface
实现减少所提供的路线
对象,如做内容协商。它是把每个过滤器的责任ResourceNotFoundException
如果没有更多的航线的集合。
通过实现创建过滤器ob娱乐下载
。他们可以注册的addRouteFilter
方法,它有一个可选的第二个参数设置优先级。
请注意
过滤步骤是可选的,用于特殊的情况。默认CmfRoutingBundle不使用任何过滤器。
3所示。最后匹配器
的FinalMatcherInterface
实现必须找到一个路线或者抛出一个异常,如果没有足够的能找到相匹配。默认实现使用UrlMatcherSymfonyob娱乐下载的路由组件和ob娱乐下载
。
您可以创建自己的最终实现匹配器ob娱乐下载
。
最后匹配器将使用第二个参数的构造函数NestedMatcher
:
1 2 3 4 5
使用ob娱乐下载\Cmf\组件\路由\NestedMatcher\UrlMatcher/ /……美元finalMatcher=新UrlMatcher(…);美元nestedMatcher=新NestedMatcher (美元routeProvider,美元finalMatcher);