Получить переменную требований к маршрутизации в Symfony2

#symfony #yaml

#symfony #yaml

Вопрос:

чтобы создать навигацию для моего веб-интерфейса, я хотел бы получить переменную из конфигурации маршрутизации моего пакета. Я определяю доступные страницы в mybundle/Resources/config/routing.yml.

 mybundle_homepage:
  pattern:  /{_locale}/{branch}/{page}
  defaults: { _controller: mybundle:mycontroller:index, _locale: de, branch: x.x.x, page: start }
  requirements:
    _locale:  de|en
    page:     start|functions|events|constants|styleguide
  

Теперь я взглянул на анализатор Symfony2 YAML, и я должен указать путь к файлу для его статического метода анализа: http://symfony.com/doc/2.0/reference/YAML.html

mycontroller.php

 use SymfonyComponentYamlYaml;

class mycontroller extends Controller
{
  public function indexAction($_locale, $branch, $page)
  {
    $routing = Yaml::parse('../Resources/config/routing.yml');
    var_dump($routing);
  }
}
  

Я думал, что смогу сделать это таким образом, потому что иерархия папок выглядит так:

  • mybundle
    • Контроллер
      • mycontroller.php
    • Поиск ресурсов
      • конфигурация
        • routing.yml

Но это не работает. Есть идеи или, может быть, другой способ получить массив requirements.page из файла маршрутизации?

С уважением, Бен

Ответ №1:

Вы должны иметь возможность доступа к службе маршрутизатора внутри класса, который поддерживает контейнер DI. Итак, вы можете написать что-то вроде:

 $routes = $this->container->get('router')->getRouteCollection();

$route = $routes->get('my_route_name');
print_r($route->getRequirements());
  

Комментарии:

1. Сработало как шарм. Спасибо! Контейнер маршрутизации называется маршрутизатором, а не маршрутом. 🙂

2. Могу я спросить, чего вы пытаетесь достичь? Получение требований к маршруту кажется мне немного странным.

3. Я хотел бы создать панель навигации поверх доступных страниц

4. Ну, вместо того, чтобы создавать свои собственные, я бы посоветовал взглянуть на KnpMenuBundle . Он выполняет свою работу очень, очень хорошо.

5. Имейте в виду, что при этом не будет использоваться кэш, поэтому маршрутизатор будет загружать все ваши маршруты при каждом вызове getRouteCollection()