2013-01-03 47 views
7
if ($u = $this->generateUrl('_'.$specific.'_thanks')) 
    return $this->redirect($u); 
else 
    return $this->redirect($this->generateUrl('_thanks')); 

我不想重定向到_specific_thanks url时它存在。那么如何检查一个url是否存在?重定向之前检查网址symfony2

当我这样做,我有这个错误:

Route "_specific_thanks" does not exist.

回答

11

我不认为有一个直接的方法来检查,如果路由存在。但是你可以通过路由器服务寻找路由存在。

$router = $this->container->get('router'); 

然后,您可以得到一个路由集合,并呼吁get()对于给定的路线,如果它不存在,它返回null。

$router->getRouteCollection()->get('_'. $specific. '_thanks'); 
+0

完美的它为我工作!只要'$ this-> container-> get('router');'用symfony 2.1.4 – Harold

+0

太好了!我更新了答案,以便它符合sf 2.1.4 :) $ this-> get('router')也可以工作,我认为。 –

-3

试试这个:

if ($u == $this->generateUrl('_'.$specific.'_thanks')) 
+0

我真的不知道该如何解决这个问题......难道你真的懂代码? – j0k

+0

我没有symfony2的经验。我看到里面是否有条件他把任务,所以我认为这可能是问题。我不知道$ this-> generateUrl()函数返回什么。 – gezimi005

+0

您是否看到该作业是在条件内使用的?因此,使用'==='删除作业... – j0k

1

尝试这样的事情,检查路线存在的所有路由的数组中:

$router = $this->get('router'); 

    if (array_key_exists('_'.$specific.'_thanks',$router->getRouteCollection->all())){ 
     return $this->redirect($this->generateUrl('_'.$specific.'_thanks')) 
    } else { 
     return $this->redirect($this->generateUrl('_thanks')); 
    } 
+0

太快了。但不是'in_array('',array_keys())''你可以做'if(array_key_exists('_'。$ specific。'_ thanks',$ router-> getRouteCollection() - > all())' – Touki

+0

' - > all()'是性能杀手 –

+0

@AlainTiemblo我不确定它真的是一个性能杀手,@ ahmedSiouani的解决方案更简洁,但代码几乎完成了同样的事情,只是'isset'而不是'array_key_exists'。请参见https: //github.com/symfony/symfony/blob/2.8/src/Symfony/Component/Routing/RouteCollection.php#L93关于“all”的工作原理,真正的性能杀手是“getRouteCollection”,因为如果它们是加载路由尚未加载。https://github.com/symfony/symfony/blob/2.8/src/Symfony/Component/Routing/Router.php#L190这已经导致我们在项目中出现一些真实的性能问题:) – Luke

0

你检查你的施法? 你确定路线吗?通常路由始于

'WEBSITENAME_'.$specific.'_thanks'

8

在运行时使用getRouteCollection()不正确的解决方案。执行此方法将需要重建缓存。这意味着路由缓存将在的每个请求上重建,使您的应用比需要的慢得多。

如果你想检查路由器是否存在,使用try ... catch构造:

use Symfony\Component\Routing\Exception\RouteNotFoundException; 

try { 
    dump($router->generate('some_route')); 
} catch (RouteNotFoundException $e) { 
    dump('Oh noes, route "some_route" doesn't exists!'); 
}