测试Twig模板中是否存在路由(Symfony 2)

use*_*294 8 routes exception path symfony twig

我想从我的数据库生成一个导航,我将路由的名称存储为链接目标.我的控制器只是从数据库中获取所有必需的导航条目,并返回直接在我的树枝模板中使用的行.

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

因此,存在不存在导致错误500的路线的可能性.

我需要一种方法来检查命名路由是否存在.我试着测试它,{% if path('routeName') is defined %} ... {% endif %}但这不起作用.

AFAIK我的控制器可以捕获Twig Exceptions但我只想要twig 忽略无效的导航条目.任何的想法?

Has*_*ast 15

您可以创建自定义树枝功能(请查看链接以获取更多信息).检查给定名称的函数是否为有效路由:

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;
}
Run Code Online (Sandbox Code Playgroud)

但我不确定以这种方式(在数据库中)处理导航是个好主意.也许你最好还用别的东西?

  • @HelpNeeder我会说`return null!== $ router-> ...`:) (3认同)