symfony indexing controller routes symfony-2.1

¿Cómo obtener una lista de todas las rutas de un controlador en Symfony2?



indexing controller (4)

En Symfony 4 quería obtener todas las rutas, incluido el controlador y las acciones en una lista. En los rieles puedes obtener esto por defecto.

En Symfony necesita agregar el parámetro show-controllers al comando debug:router .

Si alguien busca la misma característica, puede obtenerla con:

bin/console debug:router --show-controllers

esto producirá una lista como la siguiente

------------------------------------------------------------------------- ------------------------------------- Name Method Scheme Host Path Controller ------------------------------------------------------------------------- ------------------------------------- app_some_good_name ANY ANY ANY /example/example ExampleBundle:Example:getExample ------------------------------------------------------------------------- -------------------------------------

Tengo un controlador que implementa todas las rutas / URL (s) . Tuve la idea de ofrecer un índice genérico sobre todas las páginas de ayuda.

¿Hay alguna manera de obtener todas las rutas definidas por un controlador (desde dentro de un controlador) en Symfony2 ?


Estaba buscando hacer eso y luego de buscar el código, se me ocurrió esta solución que funciona para un solo controlador (o cualquier fuente en realidad). Funciona en Symfony 2.4 (no probé con versiones anteriores):

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


Lo que puedes hacer es usar el cmd con (hasta SF2.6)

php app/console router:debug

Con SF 2.7, el comando es

php app/console debug:router

Con SF 3.0, el comando es

php bin/console debug:router

que te muestra todas las rutas.

Si define un prefijo por controlador (que recomiendo) podría, por ejemplo, usar

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

para mostrar todas las rutas que coinciden

Para mostrar obtenga todas sus rutas en el controlador, con básicamente la misma salida usaría lo siguiente dentro de un controlador (es el mismo enfoque utilizado en el enrutador: comando de depuración en el componente de Symfony)

/** * @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>

La salida será:

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


Podrías obtener todas las rutas, luego crear una matriz a partir de eso y luego pasar las rutas para ese controlador a tu ramita.

No es una forma bonita, pero funciona ... para 2.1 de todos modos ...

/** @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 ;