2014-09-24 58 views
0

我正在使用Symfony 2.3。在Symfony中沒有前面斜槓的路由變量

目前我正在適應我的routing.yml使用我在parameters.yml中定義的變量。我爲每個客戶/項目選擇一個參數,但是有一段時間我需要它是空的。

默認情況下(我猜),SF在變量前需要一個前面的斜槓。

這是我目前的工作的routing.yml

index: 
    path:  /{_namespace}/ 
    defaults: 
     _controller: AppBundle:User:index 
     _namespace: %namespace% 
    methods: [GET] 

welcome: 
    path:  /{_namespace}/welcome 
    defaults: 
     _controller: AppBundle:User:welcome 
     _namespace: %namespace% 
    methods: [GET] 

而且我parameters.yml

parameters: 
    # [....] 
    namespace: 'project1' 

這讓我產生這樣的URL:

http://www.domain.com/project1/

http://www.domain.com/project1/welcome

然而,就像我以前說的,我需要有這樣的路線:

http://www.domain.com/

http://www.domain.com/welcome

對於這一點,我已經試過以下(注意排除前面的斜線):

routing.yml:

index: 
    path:  {_namespace}/ 
    defaults: 
     _controller: AppBundle:User:index 
     _namespace: %namespace% 
    methods: [GET] 

welcome: 
    path:  {_namespace}/welcome 
    defaults: 
     _controller: AppBundle:User:welcome 
     _namespace: %namespace% 
    methods: [GET] 

parameters.yml:

parameters: 
    # [....] 
    namespace: '' 

而發生異常:

[Symfony\Component\Config\Exception\FileLoaderLoadException]     
Cannot import resource "/home/cupaofarmacia/src/Ongagement/AppBundle/Resour 
ces/config/routing.yml" from "/home/project/app/config/routing.yml". 
(Malformed inline YAML string ({_namespace}/) at line 51 (near "path:   
{_namespace}/").)                

[Symfony\Component\Yaml\Exception\ParseException]        
Malformed inline YAML string ({_namespace}/) at line 51 (near "path:  { 
_namespace}/").  

我真正需要的是能夠在路線的起點傳遞一個空的變量。

有什麼建議嗎?

+0

如果您保留斜槓併爲'_namespace'提供默認值,您可以生成您提到的路線。 – user2268997 2014-09-24 11:30:56

+0

但是我的默認需要是空的,這將產生一個像「// welcome」這樣的url。 – 2014-09-24 11:31:50

+0

你的意思是什麼,需要清空?你不能只爲它提供一個佔位符嗎?如果你這樣做,那麼前面的斜槓將被忽略,並且將會是「/ welcome」。 – user2268997 2014-09-24 11:36:28

回答

0

不確定在Symfony2中是否有類似條件路由。我建議你爲命名空間爲空的情況創建一個特定的路由。

#_namespace not empty 
welcome: 
    path:  /{_namespace}/welcome 
    defaults: 
     _controller: AppBundle:User:welcome 
     _namespace: %namespace% 
    methods: [GET] 

#namespace empty 
welcome2: 
    path:  /welcome 
    defaults: 
     _controller: AppBundle:User:welcome 
    methods: [GET] 

注意到佔位符及其默認值現在不存在。

在控制器或視圖中,您只需檢查參數_namespace的值並調用其中一個路由。

//If you use the route in the controller, with generateUrl fonction for example 

$namespace= $this->container->getParameter('_namespace'); 
if($namespace!= '') { //use welcome } 
else { //use welcome2 } 

如果您在視圖中使用路由,請執行相應的操作。

希望它有幫助。

+0

你好Kaem,我很欣賞你的答案,但是重複的路線並不是真的在我的計劃中。我想我會堅持使用命名空間的通用關鍵字。 非常感謝! – 2014-09-30 14:53:41