2013-08-23 15 views
35

Ich hatte gehofft, einen Weg zu finden, ein Array mit den registrierten Routen Pfade innerhalb Laravel 4.Wie bekomme ich eine Liste der registrierten Routen in Laravel?

Wesentlichen zu schaffen, ich bin auf der Suche eine Liste etwas zu bekommen, wie diese zurückgegeben:

/ 
/login 
/join 
/password 

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

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

+1

möglich Duplikat [registrierten Routen in Laravel angezeigten 4] (http://stackoverflow.com/questions/15955295/displaying-registered-routes-in-laravel- 4) – mniess

Antwort

73

Route::getRoutes() gibt eine RouteCollection zurück. Sie können für jedes Element einen einfachen $route->getPath() eingeben, um den Pfad der aktuellen Route abzurufen.

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

Looping funktioniert wie folgt:

$routeCollection = Route::getRoutes(); 

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

Wie haben Sie die Sammlung durchlaufen? –

+0

Kann ich das in einem benutzerdefinierten Helfer verwenden? – poashoas

+0

@RajanRawal 'Collection's implementieren' ArrayAccess', das ihnen erlaubt, sich genau wie Arrays zu verhalten und in der 'foreach' verwendet zu werden. –

33

Sie Konsolenbefehl verwenden:

php artisan routes 

Helfer:

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. 
+21

Dies ist' php artisan route: list' now – Marklar

+0

Das ist für Laravel 5 wahr, aber die Frage war für Laravel 4 –

14

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

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

wenn Sie Routen wie/login/{id} kompiliert und Sie wollen das Präfix nur:

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

Ein besserer Weg, es lesbar zu erhalten, ist eine Route zu registrieren und sie in Web-Browser drucken mit dem Handwerker Ausgang direkt

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

Besser die letzte Zeile der Closure in 'return '

' . \Artisan::output() . '
' ändern;' für eine bessere Formatierung. – parrker9

+0

Ány Idee, wie man das filtert? Zum Beispiel für Routen, die wie folgt beginnen: api/' – utdev

17

Für Laravel 5 können Sie Handwerker Befehl

php artisan route:list anstelle von php artisan routes.

+0

Dies gilt nicht für 5.4 – Sevenearths

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

Kannst du bitte deine Antwort editieren und eine kurze Erklärung hinzufügen, was sie tut und wie sie funktioniert? Vielen Dank! –

+0

@FabioTurati Wir bekommen gerade alle Routen von Laravel 'getRoutes()' Methode, dann senden sie an die 'Vorlage', dann endlich erstellen Sie eine normale' html Tabelle' mit den Daten beim Durchlaufen aller von ihnen. Zum Beispiel zeigen wir die von Ihnen zugewiesene URL "uri.eps/home", "Name z. B. home_route" und die anderen an. –

1
 $routeList = Route::getRoutes(); 

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

Verwendung Illuminate \ Support \ Fassaden \ Strecke verwenden;

Auf Laravel 5.4, es funktioniert, 100%

Verwandte Themen