2016-08-31 49 views
1

我正在为第三方桌面应用程序编写新的端点,并且在应用程序中有几个不同的功能发布到我的Symfony 2.8服务器上的同一个端点。是否有可能让Symfony忽略URL中的双斜杠

有时桌面应用程序会转到正确的路径 - example.com/path/to/endpoint。但有时它会尝试在域名和路径之间添加额外的斜线 - example.com//path/to/endpoint

我想只是双斜杠在它添加一个额外的路线是这样的:

/** 
* @Route("/path/to/route", name="example_route") 
* @Route("//path/to/route", name="example_route_double_slash") 
* @Method({"POST"}) 
*/ 

的Symfony只是忽略双斜杠,当它编译路线,虽然,我最终以2“/路径/到/路由”如果我检查我的路线与app/console debug:router

+0

不完全回答你的问题,但解决您可能要采取的基本问题看看https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1511414 –

+0

我不认为这是我期待的方向......看起来像讨论的问题在这个链接固定在php-5.5.17上,我在Ubuntu上为我的生产服务器上的php 5.6.19,以及在我的mac上用于开发的php 5.6.22。两者都不起作用。 – chrislebaron

回答

2

默认情况下,Symfony的路由组件需要的参数 匹配以下正则表达式路径:[^ /] +。这意味着所有字符 都被允许,除了/。

您必须明确允许/成为参数的一部分,方法是指定 更宽松的正则表达式路径。

你的路由定义必须使用正则表达式:

/** 
* @Route("/{slash}/path/to/route", name="example_route_double_slash", requirements={"slash"="\/?"}) 
*/ 

我没有测试的代码,但它基本上是说,你要添加可能会或可能不会是一个/一个额外的参数。

的代码片段是由这一个,在官方的文档的启发:

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 

class DemoController 
{ 
    /** 
    * @Route("/hello/{username}", name="_hello", requirements={"username"=".+"}) 
    */ 
    public function helloAction($username) 
    { 
     // ... 
    } 
} 

找到更多在这里:http://symfony.com/doc/current/routing/slash_in_parameter.html

+0

太棒了,完美的工作! – chrislebaron

相关问题