Переменные маршрута без предшествующей косой черты в Symfony

Я использую Symfony 2.3.

В настоящее время я адаптирую свой файл routing.yml для использования переменной, которую я определяю в параметрах.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}/").    

Мне действительно нужно иметь возможность передать пустую переменную в начале маршрута.

Какие-либо предложения?


person Ivo Pereira    schedule 24.09.2014    source источник
comment
Вы можете сгенерировать упомянутые вами маршруты, если сохраните косую черту и укажете значения по умолчанию для _namespace.   -  person user2268997    schedule 24.09.2014
comment
Однако мое значение по умолчанию должно быть пустым, чтобы создать URL-адрес типа //welcome.   -  person Ivo Pereira    schedule 24.09.2014
comment
Что вы имеете в виду, когда говорите, что нужно быть пустым? вы не можете просто предоставить заполнитель для него? если вы это сделаете, то предшествующая косая черта будет проигнорирована, и это будет / приветствие.   -  person user2268997    schedule 24.09.2014
comment
Ну, заполнитель — это именно {_namespace}, однако передача ему пустого параметра приведет к неправильному URL-адресу.   -  person Ivo Pereira    schedule 24.09.2014


Ответы (1)


Не уверен, что в 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 }

Сделайте соответствующую ветку, если вы используете маршрут в представлении.

Надеюсь, поможет.

person Kaem Jii    schedule 27.09.2014
comment
Здравствуйте, Kaem, я ценю ваш ответ, однако дублирование маршрутов не входит в мои планы. Думаю, я буду придерживаться ключевого слова общего назначения для пространства имен. Большое спасибо! - person Ivo Pereira; 30.09.2014