if ($u = $this->generateUrl('_'.$specific.'_thanks'))
return $this->redirect($u);
else
return $this->redirect($this->generateUrl('_thanks'));
当它存在时,我不想重定向到_specific_thanks
网址。那么如何检查网址是否存在?
当我这样做时,我遇到了这个错误:
路线“_specific_thanks”不存在。
答案 0 :(得分:11)
我认为没有直接的方法可以检查路线是否存在。但是你可以通过路由器服务寻找路由存在。
$router = $this->container->get('router');
然后,您可以获取路由集合并为给定路由调用get()
,如果它不存在则返回null。
$router->getRouteCollection()->get('_'. $specific. '_thanks');
答案 1 :(得分:9)
在运行时使用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!');
}
答案 2 :(得分: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'));
}
答案 3 :(得分:0)
'WEBSITENAME_'.$specific.'_thanks'
开头
答案 4 :(得分:-4)
试试这个:
if ($u == $this->generateUrl('_'.$specific.'_thanks') )