92

我希望找到一种方法来使用 Laravel 4 中注册的路由路径创建一个数组。

本质上,我希望得到一个类似这样的列表返回:

/
/login
/join
/password

我确实遇到了一个方法Route::getRoutes(),它返回一个包含路由信息和资源的对象,但路径信息受到保护,我无法直接访问这些信息。

有没有其他方法可以实现这一目标?也许是不同的方法?

4

13 回答 13

130

Route::getRoutes()返回一个RouteCollection。在每个元素上,您可以简单$route->getPath()地获取当前路线的路径。

每个受保护的参数都可以使用标准 getter 获取。

循环的工作方式如下:

$routeCollection = Illuminate\Support\Facades\Route::getRoutes();

foreach ($routeCollection as $value) {
    echo $value->getPath();
}
于 2013-08-23T05:23:23.737 回答
75

您可以使用控制台命令:

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.
于 2014-02-20T11:52:53.977 回答
30

对于 Laravel 5,您可以使用 artisan 命令

php artisan route:list而不是php artisan routes.

于 2015-09-13T12:05:17.990 回答
26

我创建了一个路由,它将在 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>";
});
于 2014-05-15T08:43:30.673 回答
14

改进@jeanfrg 的答案

它有一些不推荐使用的功能。它在编辑答案时显示错误,因此在此处发布。

Laravel 6、7 和 8

放在里面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>";
});

演示: 通过访问它<url>/routes

输出演示

于 2020-09-04T11:19:06.567 回答
12
//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>
于 2017-04-04T15:34:09.447 回答
6

使其可读的更好方法是注册路线并直接在 Web 浏览器中使用工匠输出打印它

Route::get('routes', function() {
     \Artisan::call('route:list');
     return \Artisan::output();
});
于 2015-04-28T16:58:56.990 回答
4

如果您已经编译了 /login/{id} 之类的路由并且只需要前缀:

foreach (Route::getRoutes() as $route) {
    $compiled = $route->getCompiled();
    if(!is_null($compiled))
    {
        var_dump($compiled->getStaticPrefix());
    }
}
于 2014-07-11T16:27:30.383 回答
3
$routeList = Route::getRoutes();

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

use Illuminate\Support\Facades\Route;

在 Laravel 5.4 上,它可以工作,100%

于 2017-08-10T12:27:22.630 回答
3

代码

拉拉维尔 <= 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;
}

拉拉维尔> = 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;
}

工匠

拉拉维尔 4

php artisan routes

拉拉维尔 5

php artisan route:list
于 2018-12-05T21:33:41.410 回答
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>";
});
于 2018-08-12T17:29:43.727 回答
0

Console command for those who use Oh-my-zsh with Laravel 5 plugin

la5routes
于 2017-04-23T18:43:06.327 回答
0

并非所有路线都始终可用。

例如,如果您想从中获取路由,RouteServiceProvider则可能需要使用booted回调:

    $this->booted(function () {
        dump(Route::getRoutes());
    }
于 2021-04-28T10:30:01.300 回答