How to get a list of registered route paths in Laravel?

ArraysLaravelLaravel 4Laravel Routing

Arrays Problem Overview


I was hoping to find a way to create an array with the registered routes paths within Laravel 4.

Essentially, I am looking to get a list something like this returned:

/
/login
/join
/password

I did come across a method Route::getRoutes() which returns an object with the routes information as well as the resources but the path information is protected and I don't have direct access to the information.

Is there any other way to achieve this? Perhaps a different method?

Arrays Solutions


Solution 1 - Arrays

Route::getRoutes() returns a RouteCollection. On each element, you can do a simple $route->getPath() to get path of the current route.

Each protected parameter can be get with a standard getter.

Looping works like this:

$routeCollection = Illuminate\Support\Facades\Route::getRoutes();

foreach ($routeCollection as $value) {
	echo $value->getPath();
}

Solution 2 - Arrays

You can use console command:

> Laravel 4 as asked in question

php artisan routes

> Laravel 5 more actual

php artisan route:list


Helpers (Laravel 4) :

Usage:
 routes [--name[="..."]] [--path[="..."]]

Options:
 --name                Filter the routes by name.
 --path                Filter the routes by path.
 --help (-h)           Display this help message.
 --quiet (-q)          Do not output any message.
 --verbose (-v|vv|vvv) Increase the verbosity of messages: 1 for normal output, 2 for     more verbose output and 3 for debug
 --version (-V)        Display this application version.
 --ansi                Force ANSI output.
 --no-ansi             Disable ANSI output.
 --no-interaction (-n) Do not ask any interactive question.
 --env                 The environment the command should run under.

Solution 3 - Arrays

For Laravel 5, you can use artisan command

php artisan route:list instead of php artisan routes.

Solution 4 - Arrays

I created a route that will list each route and its respective details in an html table.

Route::get('routes', function() {
	$routeCollection = Route::getRoutes();

	echo "<table style='width:100%'>";
	    echo "<tr>";
	        echo "<td width='10%'><h4>HTTP Method</h4></td>";
	        echo "<td width='10%'><h4>Route</h4></td>";
	        echo "<td width='10%'><h4>Name</h4></td>";
	        echo "<td width='70%'><h4>Corresponding Action</h4></td>";
	    echo "</tr>";
	    foreach ($routeCollection as $value) {
	        echo "<tr>";
	            echo "<td>" . $value->getMethods()[0] . "</td>";
	            echo "<td>" . $value->getPath() . "</td>";
	            echo "<td>" . $value->getName() . "</td>";
	            echo "<td>" . $value->getActionName() . "</td>";
	        echo "</tr>";
	    }
	echo "</table>";
});

Solution 5 - Arrays

Improving @jeanfrg's answer

It has a few deprecated functions. It shows error while editing an answer, hence posting it here.

Laravel 6, 7 & 8

Put it inside routes/web.php

Route::get('routes', function () {
    $routeCollection = Route::getRoutes();

    echo "<table style='width:100%'>";
    echo "<tr>";
    echo "<td width='10%'><h4>HTTP Method</h4></td>";
    echo "<td width='10%'><h4>Route</h4></td>";
    echo "<td width='10%'><h4>Name</h4></td>";
    echo "<td width='70%'><h4>Corresponding Action</h4></td>";
    echo "</tr>";
    foreach ($routeCollection as $value) {
        echo "<tr>";
        echo "<td>" . $value->methods()[0] . "</td>";
        echo "<td>" . $value->uri() . "</td>";
        echo "<td>" . $value->getName() . "</td>";
        echo "<td>" . $value->getActionName() . "</td>";
        echo "</tr>";
    }
    echo "</table>";
});

Demo: Access it via <url>/routes

Output demo

Solution 6 - Arrays

//Laravel >= 5.4

//Controller index()
$app = app();
$routes = $app->routes->getRoutes();
return view ('Admin::routes.index',compact('routes'));

//view
<table id="routes-table" class="table table-bordered table-responsive">
       <thead>
                <tr>
                    <th>uri</th>
                    <th>Name</th>
                    <th>Type</th>
                    <th>Method</th>
                </tr>
       </thead>
       <tbody>
                @foreach ($routes as $route )
                    <tr>
                        <td>{{$route->uri}}</td>
                        <td>{{$route->getName()}}</td>
                        <td>{{$route->getPrefix()}}</td>
                        <td>{{$route->getActionMethod()}}</td>
                    </tr>
                @endforeach
        </tbody>
</table>

Solution 7 - Arrays

A better way to get it readable is to register a route and print it in web browser with the artisan output directly

Route::get('routes', function() {
	 \Artisan::call('route:list');
	 return \Artisan::output();
});

Solution 8 - Arrays

if you have compiled routes like /login/{id} and you want prefix only:

foreach (Route::getRoutes() as $route) {
	$compiled = $route->getCompiled();
	if(!is_null($compiled))
	{
		var_dump($compiled->getStaticPrefix());
	}
}

Solution 9 - Arrays

$routeList = Route::getRoutes();

foreach ($routeList as $value)
{
    echo $value->uri().'<br>';
}

use Illuminate\Support\Facades\Route;

On Laravel 5.4, it works, 100 %

Solution 10 - Arrays

Code

Laravel <= 5.3
/** @var \Illuminate\Support\Facades\Route $routes  */
$routes = Route::getRoutes();
foreach ($routes as $route) {
    /** @var \Illuminate\Routing\Route $route  */
    echo $route->getPath() .  PHP_EOL;
}
Laravel >= 5.4
/** @var \Illuminate\Support\Facades\Route $routes  */
$routes = Route::getRoutes();
foreach ($routes as $route) {
    /** @var \Illuminate\Routing\Route $route  */
    echo $route->uri. PHP_EOL;
}

Artisan

Laravel 4
php artisan routes
Laravel 5
php artisan route:list

Solution 11 - Arrays

Console command for those who use Oh-my-zsh with Laravel 5 plugin

la5routes

Solution 12 - Arrays

For Laravel 5.4. This code works fine.*

Route::get('routes', function() {
$routeCollection = Route::getRoutes();

echo "<table style='width:100%'>";
    echo "<tr>";
        echo "<td width='10%'><h4>HTTP Method</h4></td>";
        echo "<td width='10%'><h4>Route</h4></td>";
        echo "<td width='10%'><h4>Name</h4></td>";
        echo "<td width='70%'><h4>Corresponding Action</h4></td>";
    echo "</tr>";
    foreach ($routeCollection as $value) {
        echo "<tr>";
            echo "<td>" . $value->methods()[0] . "</td>";
            echo "<td>" . $value->uri() . "</td>";
            echo "<td>" . $value->getName() . "</td>";
            echo "<td>" . $value->getActionName() . "</td>";
        echo "</tr>";
    }
echo "</table>";
});

Solution 13 - Arrays

Not all the routes are available all the time.

For example if you want to get the routes from the RouteServiceProvider then you might need to use the booted callback:

    $this->booted(function () {
        dump(Route::getRoutes());
    }

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionKevin JungView Question on Stackoverflow
Solution 1 - Arraysnetvision73View Answer on Stackoverflow
Solution 2 - ArraysrinomauView Answer on Stackoverflow
Solution 3 - ArraysberkaykView Answer on Stackoverflow
Solution 4 - ArraysjeanfrgView Answer on Stackoverflow
Solution 5 - ArraysDarshan GadaView Answer on Stackoverflow
Solution 6 - ArraysCarlos AndradeView Answer on Stackoverflow
Solution 7 - ArraysJose PalazuelosView Answer on Stackoverflow
Solution 8 - ArraysLuis PozenatoView Answer on Stackoverflow
Solution 9 - ArraysTuran ZamanlıView Answer on Stackoverflow
Solution 10 - ArrayspablorskView Answer on Stackoverflow
Solution 11 - ArraysIlyichView Answer on Stackoverflow
Solution 12 - ArraysAfraz AhmadView Answer on Stackoverflow
Solution 13 - ArraysKARASZI IstvánView Answer on Stackoverflow