Я использую 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
Однако, как я уже говорил ранее, мне нужно иметь такие маршруты:
Для этого я попробовал следующее (обратите внимание на исключение предыдущего слеша):
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}/").
Мне действительно нужно иметь возможность передать пустую переменную в начале маршрута.
Какие-либо предложения?
Не уверен, что в 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 }
Сделайте веточку соответствующей, если вы используете маршрут в представлении.
Надеюсь, поможет.
Других решений пока нет …