如何在Laravel中獲取已註冊路由路徑的列表?


所有路由都儲存在routes/資料夾中。如果開啟routes/web.php,你將看到為你的應用程式定義的路由列表。如果你想使用路由,你需要包含以下類:

use Illuminate\Support\Facades\Route;

routes/web.php檔案以及上面的類在安裝Laravel時預設新增。

這是一個基本路由,當你訪問URL **https://:8000/** 時會被呼叫。它被稱為預設路由。當訪問URL時,會呼叫view('test')。

use Illuminate\Support\Facades\Route;
Route::get('/', function () {
   return view('test');
});

讓我們瞭解如何獲取所有已註冊路由的列表。

示例1

(使用artisan命令)

獲取應用程式中使用的所有路由的命令是: php artisan route:list

php artisan route:list

輸出

以上程式碼的輸出是:

C:\xampp\htdocs\laraveltest>php artisan route:list
+--------+----------+---------------------+------+-------------------------------------------------------------+------------------------------------------+
| Domain | Method   |     URI             | Name |             Action                                          |          Middleware                      |
+--------+----------+---------------------+------+-------------------------------------------------------------+------------------------------------------+
|        | GET|HEAD | /                   |      |          Closure                                            | web                                      |
|        | GET|HEAD | api/user            |      |          Closure                                            | api                                      |
|        |          |                     |      |                                                             | App\Http\Middleware\Authenticate:sanctum |
|        | GET|HEAD | sanctum/csrf-cookie |      | Laravel\Sanctum\Http\Controllers\CsrfCookieController@show  | web                                      |
|        | GET|HEAD | test                |      | App\Http\Controllers\StudentController@index                | web                                      |
|        | GET|HEAD | testarray           |      | App\Http\Controllers\testuserip@index                       | web                                      |
|        | GET|HEAD | users               |      | App\Http\Controllers\UserController@index                   | web                                      |
|        | GET|HEAD | validation          |      | App\Http\Controllers\testvalidationController@showform      | web                                      |
|        | POST     | validation          |      | App\Http\Controllers\testvalidationController@validateform  | web                                      |
+--------+----------+---------------------+------+-------------------------------------------------------------+------------------------------------------+

使用**route:list**,還會顯示每個路由可用的中介軟體。如果你想避免顯示中介軟體路由,可以按照以下示例操作。

示例2

在route:list中避免中介軟體

跳過路由列表中中介軟體路由的命令如下: php artisan route:list --except=web

php artisan route:list -v

輸出

上面的輸出是:

C:\xampp\htdocs\laraveltest>php artisan route:list -v
+--------+----------+---------------------+------+------------------------------------------------------------+------------------------------------------+
| Domain |   Method |      URI            | Name |                    Action                                  | Middleware                               |
+--------+----------+---------------------+------+------------------------------------------------------------+------------------------------------------+
|        | GET|HEAD | /                   |      | Closure                                                    | web                                      |
|        | GET|HEAD | api/user            |      | Closure                                                    | api                                      |
|        |          |                     |      |                                                            | App\Http\Middleware\Authenticate:sanctum |
|        | GET|HEAD | routes              |      | Closure                                                    | web                                      |
|        | GET|HEAD | sanctum/csrf-cookie |      | Laravel\Sanctum\Http\Controllers\CsrfCookieController@show | web                                      |
|        | GET|HEAD | test                |      | App\Http\Controllers\StudentController@index               | web                                      |
|        | GET|HEAD | testarray           |      | App\Http\Controllers\testuserip@index                      | web                                      |
|        | GET|HEAD | users               |      | App\Http\Controllers\UserController@index                  | web                                      |
|        | GET|HEAD | validation          |      | App\Http\Controllers\testvalidationController@showform     | web                                      |
|        | POST     | validation          |      | App\Http\Controllers\testvalidationController@validateform | web                                      |
+--------+----------+---------------------+------+------------------------------------------------------------+------------------------------------------+
C:\xampp\htdocs\laraveltest>

示例3

使用getRoutes()方法

要使用**getRoutes()**方法,你需要包含Route類:

use Illuminate\Routing\Router;

使用**getRoutes()**,你將得到一個RouteCollection。需要迴圈遍歷它來獲取所有路由的列表。

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Validator; use Illuminate\Routing\Router; class testuserip extends Controller { public function index(Router $route) { $r = $route->getRoutes(); foreach ($r as $value) { echo $value->uri(); echo "<br/>"; } } }

輸出

以上程式碼的輸出如下:

_ignition/health-check 
_ignition/execute-solution 
_ignition/share-report 
_ignition/scripts/{script} 
_ignition/styles/{style} sanctum/csrf-cookie
api/user 
/ 
testarray 
test 
users 
validation 
validation

示例4

在web.php中使用Route類使用getRoutes()。**getRoutes()**將返回包含所有路由列表的routeCollection。

use Illuminate\Support\Facades\Route; Route::get('/routes', function() { $routeCollection = Route::getRoutes(); foreach ($routeCollection as $value) { echo $value->getActionName(); echo "<br/>"; } });

輸出

以上程式碼的輸出是:

Facade\Ignition\Http\Controllers\HealthCheckController
Facade\Ignition\Http\Controllers\ExecuteSolutionController
Facade\Ignition\Http\Controllers\ShareReportController
Facade\Ignition\Http\Controllers\ScriptController
Facade\Ignition\Http\Controllers\StyleController
Laravel\Sanctum\Http\Controllers\CsrfCookieController@show
Closure
Closure
App\Http\Controllers\testuserip@index
App\Http\Controllers\StudentController@index
App\Http\Controllers\UserController@index
App\Http\Controllers\testvalidationController@showform
App\Http\Controllers\testvalidationController@validateform
Closure

更新於:2022年8月30日

4K+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告