How to get list of all routes of a controller in Symfony2? How to get list of all routes of a controller in Symfony2? symfony symfony

How to get list of all routes of a controller in Symfony2?


What you can do is use the cmd with (up to SF2.6)

php app/console router:debug

With SF 2.7 the command is

php app/console debug:router

With SF 3.0 the command is

php bin/console debug:router

which shows you all routes.

If you define a prefix per controller (which I recommend) you could for example use

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

to display all matching routes

To display get all your routes in the controller, with basically the same outputI'd use the following within a controller (it is the same approach used in the router:debug command in the symfony component)

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

Output will be:

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


You could get all of the routes, then create an array from that and then pass the routes for that controller to your twig.

It's not a pretty way but it works.. for 2.1 anyways..

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


I was looking to do just that and after searching the code, I came up with this solution which works for a single controller (or any ressource actually). Works on Symfony 2.4 (I did not test with previous versions) :

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