2011-09-07 35 views
16

De acuerdo, sé que no puedo llamar literalmente a una función de plantilla de rama desde un controlador, pero para hacer enlaces, generalmente hago el {{ path('_routeName') }} y eso es genial.¿Cómo accedo a la función Twig path() desde un controlador?

Sin embargo, ahora quiero formular algunos enlaces en el controlador que luego se pasa a la plantilla a través de parámetros como esto:

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

Excepto que yo no quiero codificar esos enlaces. Lo que me gustaría es poder hacer

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

pero cómo llegar al método de ruta o equivalente?

Respuesta

36

Si el controlador está extendiendo el Symfony2 Controlador (Symfony\Bundle\FrameworkBundle\Controller\Controller) se puede utilizar el siguiente para generar URL así:

$this->generateUrl('_donutRoute')

+10

Y si no, '$ this-> container-> get ('router) -> generar ('_ donutRoute');' hará estas bien – Problematic

2

He encontrado una manera alternativa de hacer esto que siento es igual a la propuesto por @ d.syph.3r

El plan es hacer:

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

El n en la plantilla twig, do:

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

La ventaja aquí es que el controlador no está generando ningún HTML en este caso.

8

Si quieres con parámetros Utilice los siguientes:

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