Здесь вы можете найти мой 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
здесь и здесь .