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?

Kevin Jung
quelle
1
Mögliches Duplikat der Anzeige registrierter Routen in Laravel 4
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();
}
netvision73
quelle
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.
Rinomau
quelle
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.

berkayk
quelle
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>";
});
jeanfrg
quelle
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>
Carlos Andrade
quelle
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());
    }
}
Luis Pozenato
quelle
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();
});
Jose Palazuelos
quelle
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
pablorsk
quelle
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%

Turan Zamanlı
quelle
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>";
});
Afraz Ahmad
quelle
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

Darshan Gada
quelle