Как получить список зарегистрированных маршрутов в Laravel?

48

Я надеялся найти способ создания массива с зарегистрированными маршрутами маршрутов в Laravel 4.

По сути, я ищу, чтобы получить список, возвращаемый таким образом:

/
/login
/join
/password

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

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

Теги:
arrays
laravel-4
laravel-routing

11 ответов

85
Лучший ответ

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

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

Цикл работает следующим образом:

$routeCollection = Route::getRoutes();

foreach ($routeCollection as $value) {
    echo $value->getPath();
}
  • 0
    как вы перебрали коллекцию?
  • 0
    Могу ли я использовать это в пользовательском помощнике?
Показать ещё 6 комментариев
38

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

Laravel 4 как задано вопросом

php artisan routes

Laravel 5 более актуален

php artisan route:list


Помощники (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.
  • 29
    Это php artisan route:list сейчас
  • 0
    Это верно для Laravel 5, но вопрос был для Laravel 4
28

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

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

  • 1
    Это не верно для 5.4
17

Я создал маршрут, который будет перечислять каждый маршрут и его соответствующие данные в таблице 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>";
});
7
//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 Мы просто получаем все маршруты из getRoutes() Laravel getRoutes() , затем отправляем их в template , а затем, наконец, создаем обычную html table с данными, проходя по всем из них. Например, мы отображаем uri eg /home , name eg home_route вы назначили, и другие.
Показать ещё 1 комментарий
4

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

Route::get('routes', function() {
     \Artisan::call('route:list');
     return \Artisan::output();
});
  • 1
    Лучше изменить последнюю строку Закрытия, чтобы return '<pre>' . \Artisan::output() . '</pre>'; для лучшего форматирования.
  • 0
    Любая идея, как это отфильтровать? Например, для маршрутов, которые начинаются как этот api/
2
     $routeList = Route::getRoutes();

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

использовать Illuminate\Support\Facades\Route;

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

  • 0
    Этот ответ работает для Laravel 5.5 ..
2

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

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

Код

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

ремесленник

Laravel 4

php artisan routes

Laravel 5

php artisan route:list
0

Для Laravel 5.4. * Этот код отлично работает.

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

Команда консоли для тех, кто использует Oh-my-zsh с Laravel 5

la5routes

Ещё вопросы

Сообщество Overcoder
Наверх
Меню