2013-06-21 57 views
8

我想從我的數據庫中生成一個導航,我將路由名稱存儲爲鏈接目標。 我的控制器只是從數據庫中獲取所有必要的導航條目,並返回直接在我的樹枝模板中使用的行。測試路由是否存在於枝條模板(Symfony 2)

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

因此,有一個路由不存在導致錯誤500

我需要一種方法來請檢查是否已命名的路由存在與否的可能性。我試圖用{% if path('routeName') is defined %} ... {% endif %}進行測試,但這不起作用。

AFAIK我的控制器可以捕捉樹枝異常,但我只是想分枝到忽略導航條目無效。任何想法?

+0

的[檢查URL重定向之前Symfony2的]可能的複製(http://stackoverflow.com/questions/14136484/check-url-before-redirect-symfony2) –

回答

12

您可以製作一個自定義的小枝功能(查詢this鏈接瞭解更多信息)。來檢查的功能是給定名稱的有效途徑:

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

但我不知道它的來處理這樣的方式導航(數據庫)是一個好主意。也許你最好使用別的東西?

+0

謝謝,現在它的工作!這幫助了我很多。緩存導航條目以將數據從數據庫中刪除將是下一步。 – user2476294

+0

'return null === $ router-> getRouteCollection() - > get($ name);'就夠了。 :) – HelpNeeder

+3

@HelpNeeder我會說'返回null!== $ router-> ...':) – Hast

0

你也可以檢查:

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