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

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

Я работаю с пакетом разбиения на страницы , который использует имя маршрута, указанное в файле 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 %}
   

{{ item }}

{% endfor %}

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

8
задан hakre 30 April 2012 в 21:28
поделиться