2016-08-31 73 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

相關問題