【问题标题】:Test if route exists in Twig Template (Symfony 2)测试 Twig 模板中是否存在路由(Symfony 2)
【发布时间】:2013-06-21 17:39:42
【问题描述】:

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

/**
* @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 我的控制器可以捕获 Twig 异常,但我只想让 twig 忽略 无效的导航条目。有什么想法吗?

【问题讨论】:

标签: exception symfony path twig routes


【解决方案1】:

您可以制作自定义树枝功能(查看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;
}

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

【讨论】:

  • 谢谢,现在可以了!这对我帮助很大。下一步是缓存导航条目以减轻数据库的负担。
  • return null === $router->getRouteCollection()->get($name); 已经足够好了。 :)
  • @HelpNeeder 我会说return null !== $router-> ... :)
  • 根据该评论,最好抓住@imanali 示例之类的异常:github.com/symfony/symfony-docs/issues/6710
猜你喜欢
  • 2011-01-03
  • 2016-12-14
  • 2012-09-10
  • 2021-07-23
  • 1970-01-01
  • 1970-01-01
  • 2019-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多