如何在Symfony2中使路由不区分大小写?
Symfony2中是否有允许使用大小写不敏感路由的配置 例如,以下路线应视为相同:如何在Symfony2中使路由不区分大小写?,symfony,routing,Symfony,Routing,Symfony2中是否有允许使用大小写不敏感路由的配置 例如,以下路线应视为相同: www.exmaple.com/all www.exmaple.com/ALL 有一个,但没有参考如何做到这一点。据我所知,Symfony 2不可能做到这一点。但是,您应该能够通过Apache的mod_重写来完成它。有关详细信息,请参阅 请务必阅读注释,因为最初的帖子有一些错误。从Symfony2.4开始,您现在可以为路由定义条件,并使用表达式语言执行complexe检查。见文件 另一个解决方案是重写rout
www.exmaple.com/all
www.exmaple.com/ALL
有一个,但没有参考如何做到这一点。据我所知,Symfony 2不可能做到这一点。但是,您应该能够通过Apache的mod_重写来完成它。有关详细信息,请参阅
请务必阅读注释,因为最初的帖子有一些错误。从Symfony2.4开始,您现在可以为路由定义条件,并使用表达式语言执行complexe检查。见文件 另一个解决方案是重写route compiler类以更改/扩展路由匹配器的php编译:
contact:
path: /{media}
defaults: { _controller: AcmeDemoBundle:Main:contact, media: organic }
requirements:
media: email|organic|ad
options:
compiler_class: MyVendor\Component\Routing\CaseInsensitiveRouteCompiler
见课堂
或者,正如Fabbot在pull请求注释中所说的,您可以重写request::getPathInfo[1]方法以始终返回小写字符串(使用setFactory[2]重写默认请求类)
*1 github.com/symfony/symfony/blob/master/src/symfony/Component/HttpFoundation/Request.php#L866
*2 github.com/symfony/symfony/blob/master/src/symfony/Component/HttpFoundation/Request.php#L402我发现了一种很好的方法,可以在纯symfony中实现这一点,而无需为每个路由创建不区分大小写的转发规则 这将利用细枝例外控制器。因为这是在路由匹配失败(或者由于其他原因引发了404异常)之后发生的,所以它不会破坏任何使用大写字母的现有路由URL(尽管这仍然是个坏主意) 唯一的另一个技巧是,您需要将此控制器配置为服务,您可以将正确的参数注入父类的构造函数: in services.yml
services:
application.custom.exception_controller:
class: Application\Symfony\TwigBundle\Controller\ExceptionController
arguments: [ "@twig", "%kernel.debug%" ]
在config.yml中:
twig:
exception_controller: application.custom.exception_controller:showAction
当然,您可以将此控制器和服务定义粘贴到任何位置
twig:
exception_controller: application.custom.exception_controller:showAction