我有一个问题:所以对于示例,我在symfony3中有一个应用程序,其中包含以下路由:$ docker run -e NODE_HOST=`docker-machine ip default` -e NODE_PORT=8000 -p 8000:9324 tddmonkey/elasticmq
,/admin/login
,admin/news
,但路由admin/gallery
没有&存在。所以我的想法是,如果路线不存在,我想将用户重定向到主页/admin/authentification
。你能帮我吗 ?提前致谢并抱歉我的英文
答案 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;
}
根据结果,重定向到路径,或默认网页,或任何你需要的。