2013-06-21 16 views
8

Ich möchte eine Navigation aus meiner Datenbank generieren, in der die Namen meiner Routen als Verknüpfungsziele gespeichert werden. Mein Controller holt einfach alle notwendigen Navigationseinträge aus der Datenbank und gibt die Zeilen zurück, die direkt in meiner Zweigvorlage verwendet werden.Test, ob eine Route in der Zweigvorlage (Symfony 2) existiert

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

So besteht die Möglichkeit, dass eine Route existiert nicht, die in Fehler ergibt 500.

Ich brauche eine Methode zu überprüfen, ob eine benannte Route existiert oder nicht. Ich habe versucht, es mit {% if path('routeName') is defined %} ... {% endif %} zu testen, aber das funktioniert nicht.

AFAIK mein Controller könnte Twig Ausnahmen fangen, aber ich möchte nur Zweig ignorieren Navigation Einträge, die nicht gültig sind. Irgendeine Idee?

+0

Mögliche Duplikat [url Prüfen Sie vor Symfony2 umleiten] (http://stackoverflow.com/questions/14136484/check-url-before-redirect-symfony2) –

Antwort

12

Sie können eine benutzerdefinierte Zweigfunktion erstellen (weitere Informationen finden Sie unter this Link). Eine Funktion, die eine gültige Route ist dem angegebenen Namen überprüft:

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; 
} 

Aber ich bin nicht sicher, ob es eine gute Idee ist die Navigation in einer solchen Art und Weise (in der Datenbank) zu behandeln. Vielleicht solltest du etwas anderes benutzen?

+0

Dank , jetzt funktioniert es! Das hat mir sehr geholfen. Zwischenspeichern der Navigationseinträge, um die Datenbank zu entlasten, ist der nächste Schritt. – user2476294

+0

'zurück null === $ router-> getRouteCollection() -> get ($ name);' ist gut genug. :) – HelpNeeder

+3

@HelpNeeder Ich würde 'Return null! == $ router-> ...' sagen :) – Hast

0

Auch können Sie überprüfen:

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