Wie erhalte ich eine Liste der registrierten Routenpfade in Laravel?


77

Ich hatte gehofft, einen Weg zu finden, um ein Array mit den registrierten Routenpfaden in Laravel 4 zu erstellen.

Im Wesentlichen suche ich nach einer Liste wie dieser:

/
/login
/join
/password

Ich bin auf eine Methode Route::getRoutes()gestoßen, die ein Objekt mit den Routeninformationen sowie den Ressourcen zurückgibt, aber die Pfadinformationen sind geschützt und ich habe keinen direkten Zugriff auf die Informationen.

Gibt es einen anderen Weg, um dies zu erreichen? Vielleicht eine andere Methode?


1
am

Antworten:


119

Route::getRoutes()gibt a zurück RouteCollection. Für jedes Element können Sie einfach $route->getPath()den Pfad der aktuellen Route ermitteln.

Jeder geschützte Parameter kann mit einem Standard-Getter abgerufen werden.

Looping funktioniert folgendermaßen:

$routeCollection = Route::getRoutes();

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

Wie haben Sie die Sammlung durchlaufen?
Rajan Rawal

Kann ich dies in einem benutzerdefinierten Helfer verwenden?
Poashoas

@ RajanRawals CollectionGerät ArrayAccess, mit dem sie sich wie Arrays verhalten und in der verwendet werden können foreach.
Andrew Brown

3
Wenn Sie Fassaden vermeiden möchten, können Sie spritzen Illuminate\Routing\Router.
Andrew Brown

12
Nur für den Fall, dass jemand es nützlich findet, können Sie mit Laravel> = 5.5 $routes = array_map(function (\Illuminate\Routing\Route $route) { return $route->uri; }, (array) Route::getRoutes()->getIterator());
Folgendes

60

Sie können den Konsolenbefehl verwenden:

Laravel 4 wie in Frage gestellt

php artisan routes

Laravel 5 aktueller

php artisan route:list


Helfer (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.

31
Dies ist php artisan route:listjetzt
Marklar

Das gilt für Laravel 5, aber die Frage war für Laravel 4
Zachary Weixelbaum

29

Für Laravel 5 können Sie den Handwerkerbefehl verwenden

php artisan route:liststatt php artisan routes.


1
Dies gilt nicht für 5.4
Robert Johnstone

18

Ich habe eine Route erstellt, die jede Route und ihre jeweiligen Details in einer HTML-Tabelle auflistet.

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>";
});

9
//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>

1
Können Sie bitte Ihre Antwort bearbeiten und eine kurze Erklärung hinzufügen, was es tut und wie es funktioniert? Vielen Dank!
Fabio sagt Reinstate Monica

@FabioTurati Wir erhalten gerade alle Routen von der Laravel- getRoutes()Methode, senden sie dann an die templateund erstellen schließlich eine Normalität html tablemit den Daten, während wir alle durchlaufen. Zum Beispiel sind die Anzeige wir die uri e.g /home, name e.g home_routeIhnen zugeordnet und die anderen.
Gideon Maina

Funktioniert für Laravel 5.6.x Danke
Vicky Gill

4

Wenn Sie Routen wie / login / {id} kompiliert haben und nur ein Präfix möchten:

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

4

Eine bessere Möglichkeit, sie lesbar zu machen, besteht darin, eine Route zu registrieren und sie im Webbrowser mit der handwerklichen Ausgabe direkt auszudrucken

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

1
Ändern Sie die letzte Zeile des Abschlusses return '<pre>' . \Artisan::output() . '</pre>';besser in, um die Formatierung zu verbessern.
parrker9

Ány Idee, wie man das filtert? Zum Beispiel für Routen, die so beginnenapi/
utdev

@utdev Ich weiß, dass dies alte Kommentare sind, Sie können den Parameter übergeben, um so zu filtern\Artisan::call('route:list', ['--path' => 'api']);
Meow Kim

2

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;
}

Handwerker

Laravel 4

php artisan routes

Laravel 5

php artisan route:list

2
$routeList = Route::getRoutes();

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

use Illuminate\Support\Facades\Route;

Auf Laravel 5.4 funktioniert es zu 100%



0

Für Laravel 5.4. * Dieser Code funktioniert einwandfrei.

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>";
});

0

Verbesserung der Antwort von @ jeanfrg

Es hat einige veraltete Funktionen. Es wird ein Fehler beim Bearbeiten einer Antwort angezeigt und daher hier veröffentlicht.

Laravel 6, 7 & 8

Lege es hinein 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: Zugriff über<url>/routes

Demo ausgeben

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.