如何在Symfony2中使路由不区分大小写?

如何在Symfony2中使路由不区分大小写?,symfony,routing,Symfony,Routing,Symfony2中是否有允许使用大小写不敏感路由的配置 例如,以下路线应视为相同: www.exmaple.com/all www.exmaple.com/ALL 有一个,但没有参考如何做到这一点。据我所知,Symfony 2不可能做到这一点。但是,您应该能够通过Apache的mod_重写来完成它。有关详细信息,请参阅 请务必阅读注释,因为最初的帖子有一些错误。从Symfony2.4开始,您现在可以为路由定义条件,并使用表达式语言执行complexe检查。见文件 另一个解决方案是重写rout

Symfony2中是否有允许使用大小写不敏感路由的配置

例如,以下路线应视为相同:

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