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

Я использую 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'

И это позволяет мне создавать 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

Решение

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]