在Symfony中路由变量而不使用前面的斜杠

时间:2014-09-24 10:32:38

标签: php symfony routing yaml symfony-2.3

我使用的是Symfony 2.3。

目前我正在调整我的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'

这让我可以制作如下网址:

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}/").    

我真的需要能够在路径的开头传递一个空变量。

有什么建议吗?

1 个答案:

答案 0 :(得分: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 }

如果在视图中使用路线,请将树枝对应。

希望它有所帮助。