如果路由确实存在,则重定向

时间:2016-02-29 20:22:25

标签: php symfony

我有一个问题:所以对于示例,我在symfony3中有一个应用程序,其中包含以下路由:$ docker run -e NODE_HOST=`docker-machine ip default` -e NODE_PORT=8000 -p 8000:9324 tddmonkey/elasticmq/admin/loginadmin/news,但路由admin/gallery没有&存在。所以我的想法是,如果路线不存在,我想将用户重定向到主页/admin/authentification。你能帮我吗 ?提前致谢并抱歉我的英文

2 个答案:

答案 0 :(得分:1)

我不相信这是最佳解决方案,但您可以使用UrlMatcher检查您传递的网址是否与可用路由相关:

/**
 * @Route("/debug")
 */

public function DebugAction(){
    $router = $this->get('router');

    //Get all the routes that exist.
    $routes = $router->getRouteCollection();
    $context = $router->getContext();

    $urlMatcher = new UrlMatcher($routes, $context);

    $url = '/admin/login';
    try{
        //UrlMatcher::match() will throw a ResourceNotFoundException if the route 
        //doesn't exist.
        $urlMatcher->match($url);
        return $this->redirect($url);
    } catch (\Symfony\Component\Routing\Exception\ResourceNotFoundException $e){
        return $this->redirect('/');
    }
}

我不是特别热衷于这个解决方案,因为它依赖于捕获异常,而不是检查布尔值来确定路由是否存在。

答案 1 :(得分:0)

您可以检查溃败是否存在。

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;
}

根据结果,重定向到路径,或默认网页,或任何你需要的。