2011-09-07 17 views
16

Ok, so che non posso letteralmente chiamare una funzione di modello di ramoscello da un controller, ma per creare collegamenti, di solito faccio il {{ path('_routeName') }} e questo è fantastico.Come accedere alla funzione Twig path() da un controller?

Tuttavia, ora voglio formulare alcuni collegamenti nel controller che verrà poi passata al template tramite parametri in questo modo:

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

Solo che non voglio hard-code tali collegamenti. Quello che mi piacerebbe essere in grado di fare

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

ma come raggiungere il metodo percorso o equivalente?

risposta

36

Se il controller sta estendendo il Symfony2 Controller (Symfony\Bundle\FrameworkBundle\Controller\Controller) è possibile utilizzare il seguente per generare gli URL come questo:

$this->generateUrl('_donutRoute')

+10

E se no, '$ this-> container-> get ('router') -> generare ('_ donutRoute');' farà Stai bene. – Problematic

2

Ho trovato un modo alternativo per fare questo che mi sento è pari alla quella proposta da @ d.syph.3r

Il piano è quello di fare:

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

Il n nel modello ramoscello, fare:

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

Il vantaggio è che il controller non genera alcun codice HTML in questo caso.

8

Se si vuole con i parametri di utilizzare il seguente:

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