#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()