Laravel 的路由定義在 routes 目錄下,默認(rèn)提供了三個文件,console.php、api.php、web.php,分別對應(yīng)了控制臺模式、api 模式和 web 網(wǎng)站三種不同模式下的路由使用。
Laravel 的路由支持任意一種 HTTP 請求方式,GET、POST、PUT、PATCH、DELETE、OPETIONS。
基本路由
只響應(yīng)一個 URI 請求的路由形式。
Route::get('hello', function (){
return 'Hello Laravel';
})
這是一個最簡單的??,通過一個匿名函數(shù)來響應(yīng)了請求,正常情況下我們會將請求的響應(yīng)函數(shù)封裝到一個 Controller 中,然后在此處進行配置。
可以通過注冊路由來響應(yīng)任何的 HTTP 請求,GET、POST、PATCH、PUT、DELETE、OPTIONS。
如果需要注冊路由來響應(yīng)多個 HTTP 請求,可以使用 match 或 any 方法。
// 響應(yīng) get 和 post 請求
Route::match(['get', 'post'], '/', function () {
//
});
// 響應(yīng)任意一種請求
Route::any('foo', function () {
//
});
路由參數(shù)
在路由定義中可以設(shè)置自定義參數(shù),用戶輸入的 URL 信息根據(jù)路由拆解后,將匹配參數(shù)的內(nèi)容傳遞到回調(diào)函數(shù)中。路由參數(shù)又分為必選參數(shù)和可選參數(shù),前者是必須完全一致匹配的,后者則不一定存在,需要提供默認(rèn)參數(shù),形式如下:
// 使用必選參數(shù)
Route::get('user/{id}', function ($userId){
return 'User-' . $userId;
});
// 使用可選參數(shù)
Route::get('user/{name?}', function ($name = null){
return 'User name is ' . $name;
});
使用路由參數(shù)的方式可以使得一個路由能夠匹配多個 URL。
可以使用正則來對路由參數(shù)進行限制。
// 參數(shù) id 只能是數(shù)字,不能是其他字符
Route::get('user/{id}', function($id)
{
//
})
->where('id', '[0-9]+');
命名路由
顧名思義,就是給路由起一個易于理解也易于使用的名字,為生成 URL 和重定向提供便利。
Route::get('user/profile', function (){
return 'User Profile';
})->name('profile');
分組路由
分組路由可以為同組的路由提供相同的中間件或命名空間等共享屬性,無需再為每個路由單獨指定。
// 指定中間件,可以指定多個
Route::group(['middleware' => 'auth'], function () {
Route::get('/', function () {
// 使用 Auth 中間件
});
Route::get('user/profile', function () {
// 使用 Auth 中間件
});
});
// 指定命名空間
Route::group(['namespace' => 'Admin'], function(){
// 控制器在 "App\Http\Controllers\Admin" 命名空間下
Route::group(['namespace' => 'User'], function(){
// 控制器在 "App\Http\Controllers\Admin\User" 命名空間下
});
});
// 指定路由前綴
Route::group(['prefix' => 'admin'], function () {
Route::get('users', function () {
// 匹配 "/admin/users" URL
});
});