Symfony2:获取控制器所有路由的列表

我有一个控制器,实现所有路线/url用于显示帮助页面。 路线由注释定义。 我的想法是提供所有帮助页面的通用索引。 有没有办法让一个控制器(从控制器内)定义的所有路由?

你可以得到所有的路由,然后创build一个数组,然后将该控制器的路由传递给你的树枝。

这不是一个漂亮的方式,但它的作品.. 2.1反正..

/** @var $router \Symfony\Component\Routing\Router */ $router = $this->container->get('router'); /** @var $collection \Symfony\Component\Routing\RouteCollection */ $collection = $router->getRouteCollection(); $allRoutes = $collection->all(); $routes = array(); /** @var $params \Symfony\Component\Routing\Route */ foreach ($allRoutes as $route => $params) { $defaults = $params->getDefaults(); if (isset($defaults['_controller'])) { $controllerAction = explode(':', $defaults['_controller']); $controller = $controllerAction[0]; if (!isset($routes[$controller])) { $routes[$controller] = array(); } $routes[$controller][]= $route; } } $thisRoutes = isset($routes[get_class($this)]) ? $routes[get_class($this)] : null ; 

你可以做的是使用CMD(最高SF2.6)

 php app/console router:debug 

用SF 2.7的命令是

 php app/console debug:router 

用SF 3.0的命令是

 php bin/console debug:router 

它显示你所有的路线。

如果你定义每个控制器的前缀(我build议),你可以例如使用

 php app/console router:debug | grep "<prefixhere>" 

显示所有匹配的路线

要显示在控制器中获取所有的路由,基本上是相同的输出,我会在控制器中使用以下内容(在symfony组件中使用路由器:debug命令)

 /** * @Route("/routes", name="routes") * @Method("GET") * @Template("routes.html.twig") * * @return array */ public function routeAction() { /** @var Router $router */ $router = $this->get('router'); $routes = $router->getRouteCollection(); foreach ($routes as $route) { $this->convertController($route); } return [ 'routes' => $routes ]; } private function convertController(\Symfony\Component\Routing\Route $route) { $nameParser = $this->get('controller_name_converter'); if ($route->hasDefault('_controller')) { try { $route->setDefault('_controller', $nameParser->build($route->getDefault('_controller'))); } catch (\InvalidArgumentException $e) { } } } 

routes.html.twig

 <table> {% for route in routes %} <tr> <td>{{ route.path }}</td> <td>{{ route.methods|length > 0 ? route.methods|join(', ') : 'ANY' }}</td> <td>{{ route.defaults._controller }}</td> </tr> {% endfor %} </table> 

输出将是:

/_wdt/{token} ANY web_profiler.controller.profiler:toolbarAction

我正在寻找这样做,并在search代码后,我想出了这个解决scheme适用于单个控制器(或实际上任何资源)。 在Symfony 2.4上工作(我没有testing以前的版本):

 $routeCollection = $this->get('routing.loader')->load('\Path\To\Controller\Class'); foreach ($routeCollection->all() as $routeName => $route) { //do stuff with Route (Symfony\Component\Routing\Route) }