Updated June 2026. Tested on Laravel 13 and PHP 8.4.

Sometimes you just need to see every route in your app, with its method, URI and the controller action behind it. Years ago you might have written a little route to loop over the route collection and print a table. You do not need to anymore, because Laravel ships a command that does exactly this, and does it better.

The command

php artisan route:list

That prints a clean table of every registered route: the HTTP method, the URI, the route name, and the controller and method it points at. This is the answer almost every time.

Useful filters

On a real app the list gets long, so narrow it down.

# only routes whose URI contains "api"
php artisan route:list --path=api

# only routes with a given name fragment
php artisan route:list --name=user

# only a specific method
php artisan route:list --method=POST

# hide vendor package routes, show just yours
php artisan route:list --except-vendor

# full controller and middleware detail
php artisan route:list -v

When you need them in code

Occasionally you want the routes inside the app itself, for example to build a sitemap or a debug screen. Use the Route facade to get the collection and read each route's details.

use Illuminate\Support\Facades\Route;

foreach (Route::getRoutes() as $route) {
    $method = implode('|', $route->methods());
    $uri    = $route->uri();
    $action = $route->getActionName();

    // $route->getName() is also available
}

methods() returns the HTTP verbs, uri() the path, and getActionName() the controller and method (or Closure for inline routes). That is the modern API; the old getPath() and getMethods()[0] calls from years ago still work but read less clearly.

In short

Reach for php artisan route:list with a filter. It is built in, always up to date with the framework, and far nicer than printing your own table. Drop into Route::getRoutes() only when you genuinely need the routes inside running code. Questions welcome in the comments.