在重定向symfony2之前检查URL

时间:2013-01-03 09:55:11

标签: php symfony routing

if ($u = $this->generateUrl('_'.$specific.'_thanks'))
  return $this->redirect($u);
else
  return $this->redirect($this->generateUrl('_thanks'));

当它存在时,我不想重定向到_specific_thanks网址。那么如何检查网址是否存在?

当我这样做时,我遇到了这个错误:

  

路线“_specific_thanks”不存在。

5 个答案:

答案 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') )