Как получить во время выполнения название маршрута в Symfony2 при использовании описания маршрутов yaml?

Здесь вы можете найти мой n-й вопрос на Symfony2.

Я работаю с routing.yml папок, который использует имя маршрута, routing.yml файле routing.yml . С моей точки зрения, этот подход не является гибким и приводит к грязному коду, поскольку, если я изменю имя маршрута, тогда я должен посмотреть все шаблоны Twig или файлы PHP для обновления имени маршрута. Это нормально для небольших веб-приложений, но обеспечит такую ​​ошибку для более крупных приложений, а также потребует большой нагрузки для разработчика.

Поэтому мне было интересно передать строчную переменную x в объект Pager предоставленный вышеупомянутым пакетом. Строка x должна быть инициализирована в контроллере и должна предоставить требуемое имя маршрута, указанное в файле routing.yml .

Позвольте мне привести пример. Файл маршрутизации следующий:

 //routing.yml AcmeTestBundle_listall: pattern: /test/page/{page} defaults: { _controller: AcmeTestBundle:List:listall, page: 1 } requirements: page: \d+ 

Затем связанный контроллер:

 //use something.... class ListController extends Controller { public function exampleAction($page) { $array = range(1, 100); $adapter = new ArrayAdapter($array); $pager = new Pager($adapter, array('page' => $page, 'limit' => 25)); return array('pager' => $pager); } } 

Затем, в шаблоне ветки, $pager получает имя маршрута, которое относится к вышеуказанному набору

 {% if pager.isPaginable %} {{ paginate(pager, 'AcmeTestBundle_listall') }} {% endif %} {% for item in pager.getResults %} <p>{{ item }}</p> {% endfor %} 

Любая идея о том, как получить строковое значение «AcmeTestBundle_listall» во время выполнения только внутри контроллера?

Вы можете использовать глобальную переменную app , доступную в ветке, чтобы получить текущий маршрут из запроса.

 {% if pager.isPaginable %} {{ paginate(pager, app.request.get('_route') }} {% endif %} 

Подробнее о app здесь и здесь .