Как получить доступ к функции Twig path() из контроллера?

Хорошо, я знаю, что я не могу буквально вызвать функцию шаблона ветки с контроллера, но для создания ссылок я обычно делаю {{ path('_routeName') }} и отлично.

Однако теперь я хочу сформулировать некоторые ссылки в контроллере, которые затем будут переданы шаблону с помощью таких параметров:

$params = array(
    'breadcrumbs' = array(
        'Donuts' => '/donuts',
        'Bearclaws' => '/donuts/bearclaws',
        'Strawberry bearclaw' => null,
    ),
);
return $this->render('Bundle:Donut:info.html.twig', $params);

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

        'Donuts' => path('_donutRoute'),

но как достичь метода пути или эквивалента?

Ответы

Ответ 1

Если ваш контроллер расширяет контроллер Symfony2 (Symfony\Bundle\FrameworkBundle\Controller\Controller), вы можете использовать следующие для генерации URL-адресов:

$this->generateUrl('_donutRoute')

Ответ 2

Если вы хотите, чтобы с параметрами вы использовали следующее:

$this->generateUrl('_donutRoute', array('param1'=>'val1', 'param2'=>'val2'))

Ответ 3

Я нашел альтернативный способ сделать это, что, по моему мнению, равен тому, который предложен @d.syph.3r

План должен сделать:

'breadcrumbs' = array(
    'Donuts' => 'donutsRoute',
    'Bearclaws' => 'bearclawRoute',
    'Strawberry bearclaw' => null,
)

Затем в шаблоне ветки выполните:

{% for name, route in breadcrumbs %}
   {{ path(route) }}

Преимущество в том, что в этом случае контроллер не генерирует HTML.