2013-06-21 7 views
8

Desidero generare una navigazione dal mio database in cui memorizzo i nomi dei miei percorsi come destinazioni di collegamento. Il mio controller ottiene semplicemente tutte le voci di navigazione necessarie dal database e restituisce le righe utilizzate direttamente nel mio modello di ramoscello.Verifica se il percorso esiste in Twig Template (Symfony 2)

/** 
* @Route("/") 
* @Template() 
*/ 
public function myAction() { 
    $em = $this->getDoctrine()->getManager(); 
    $navi = $em->getRepository('myBundle:Navigation')->findAll(); 
    return array("navi" => $navi); 
} 

V'è quindi la possibilità che un percorso non esiste che si traduce in errore 500.

ho bisogno di un metodo per controllare che scendessimo esiste o no un percorso di nome. Ho provato a testarlo con {% if path('routeName') is defined %} ... {% endif %} ma questo non funziona.

AFAIK il mio controller è in grado di rilevare le eccezioni di Twig ma voglio solo ramificare su ignorare le voci di spostamento non valide. Qualche idea?

+0

Possibile duplicato del [url Controllare prima di reindirizzare Symfony2] (http://stackoverflow.com/questions/14136484/check-url-before-redirect-symfony2) –

risposta

12

È possibile eseguire una funzione di ramoscello personalizzata (controllare il collegamento this per ulteriori informazioni). Funzione che controlla è il nome dato un percorso valido:

function routeExists($name) 
{ 
    // I assume that you have a link to the container in your twig extension class 
    $router = $this->container->get('router'); 
    return (null === $router->getRouteCollection()->get($name)) ? false : true; 
} 

Ma io non sono sicuro che sia una buona idea per gestire la navigazione in modo tale (nel database). Forse faresti meglio a usare qualcos'altro?

+0

Grazie , ora funziona! Questo mi ha aiutato molto. La memorizzazione nella cache delle voci di navigazione per rimuovere il carico dal database sarà il passaggio successivo. – user2476294

+0

'return null === $ router-> getRouteCollection() -> get ($ name);' è abbastanza buono. :) – HelpNeeder

+3

@HelpNeeder Direi 'return null! == $ router-> ...' :) – Hast

0

Inoltre è possibile controllare:

$router = $this->container->get('router'); 
try { 
    dump($router->generate('HomePage')); 
} catch (RouteNotFoundException $e) { 
    dump('Oh noes, route "HomePage" does not exists!'); 
}