2013-08-23 4 views
35

Я надеялся найти способ, чтобы создать массив зарегистрированных маршрутов путей в пределах Laravel 4.Как получить список зарегистрированных маршрутов маршрута в Laravel?

По существу, я ищу, чтобы получить список что-то вроде этого вернулся:

/ 
/login 
/join 
/password 

Я пришел через метод Route::getRoutes(), который возвращает объект с информацией о маршрутах, а также ресурсы, но информация о пути защищена, и я не имею прямого доступа к этой информации.

Есть ли другой способ достичь этого? Возможно, другой метод?

+1

возможно дубликат [Отображение зарегистрированных маршрутов в Laravel 4] (http://stackoverflow.com/questions/15955295/displaying-registered-routes-in-laravel- 4) – mniess

ответ

73

Route::getRoutes() возвращает RouteCollection. На каждом элементе вы можете сделать простой $route->getPath(), чтобы получить путь к текущему маршруту.

Каждый защищенный параметр можно получить со стандартным геттером.

Looping работает так:

$routeCollection = Route::getRoutes(); 

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

как вы перебирали по коллекции? –

+0

Могу ли я использовать это в специальном помощнике? – poashoas

+0

@RajanRawal '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '', который позволяет им вести себя как массивы и использоваться в 'foreach'. –

33

Вы можете использовать консольную команду:

php artisan routes 

Помощники:

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

Это' php artisan route: list' now – Marklar

+0

Это верно для Laravel 5, но вопрос был о Laravel 4 –

14

Я создал маршрут, который будет перечислять каждый маршрут и его соответствующие детали в таблице html.

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

если вы собрали маршруты, такие как/логин/{ID} и вы хотите префикс только:

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

Лучший способ получить его для чтения, чтобы зарегистрировать маршрут и распечатать его в веб-браузере с выходом ремесленника непосредственно

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

Лучше изменить последнюю строку закрытия на 'return '

' . \Artisan::output() . '
';' для лучшего форматирования. – parrker9

+0

Ány Идея, как отфильтровать это? Например, для маршрутов, которые начинаются следующим образом: 'api /' – utdev

17

Для Laravel 5, вы можете использовать команду мастеровых

php artisan route:list вместо php artisan routes.

+0

Это не относится к 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

Можете ли вы, пожалуйста, отредактировать свой ответ и добавить краткое описание того, что он делает и как оно работает? Спасибо! –

+0

@FabioTurati Мы просто получаем все маршруты из метода Laravel 'getRoutes()', а затем отправляем их в 'template', затем, наконец, создаем обычную' html-таблицу' с данными, проходя через все их. Например, мы показываем 'uri e.g/home',' name eg home_route', которые вы назначили, и другие. –

1
 $routeList = Route::getRoutes(); 

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

использования Осветите \ Support \ Фасады \ Маршрут;

На Laravel 5.4, она работает, 100%

Смежные вопросы