路由文件

  • routes/web.php:web 界面路由,使用 web 中间件组,提供会话状态和 CSRF 保护等功能。
  • routes/api.php:api 路由,分配 api 中间件组,自动添加 /api URL 前缀,无状态。
  • RouteServiceProvider:路由服务提供者。

路由示例

Route::get('foo', function () {
    return 'Hello World';
});
Route::get('/user', 'UserController@index');

路由方法

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

# 重定向,默认会返回状态码 302
Route::redirect('/here', '/there');
Route::redirect('/here', '/there', 301);

# 视图路由
Route::view('/welcome', 'welcome');
Route::view('/welcome', 'welcome', ['name' => 'Taylor']);

路由参数

Route::get('user/{id}', function ($id) {
    return 'User '.$id;
});

Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
    //
});

# 可选参数
Route::get('user/{name?}', function ($name = null) {
    return $name;
});

# 参数约束
Route::get('user/{id}/{name}', function ($id, $name) {
    //
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);

路由命名

Route::get('user/profile', 'UserProfileController@show')->name('profile');
$url = route('profile'); // 生成 URL...
return redirect()->route('profile'); // 重定向...

# 带参数的命名路由
Route::get('user/{id}/profile', function ($id) {})->name('profile');
$url = route('profile', ['id' => 1]);

路由组中间件

Route::middleware(['first', 'second'])->group(function () {
    Route::get('/', function () {});
    Route::get('user/profile', function () {});
});

路由组命名空间

Route::namespace('Admin')->group(function () {
    // 在 「App\Http\Controllers\Admin」 命名空间下的控制器
});

路由组子域名

Route::domain('{account}.myapp.com')->group(function () {
    Route::get('user/{id}', function ($account, $id) {});
});

路由组前缀

Route::prefix('admin')->group(function () {
    Route::get('users', function () {
        // 匹配包含 「/admin/users」 的 URL
    });
});

路由组名称前缀

Route::name('admin.')->group(function () {
    Route::get('users', function () {
        // 路由名为 「admin.users」
    })->name('users');
});

回退路由

# 没有匹配的路由处理请求时,才执行的路由,应放在最后
Route::fallback(function () {});

路由限流

# 每分钟访问频率不超过 60 次
Route::middleware('auth:api', 'throttle:60,1')->group(function () {
    Route::get('/user', function () {});
});

# 在 User 模型包含 rate_limit 属性指定动态限流
Route::middleware('auth:api', 'throttle:rate_limit,1')->group(function () {
    Route::get('/user', function () {});
});

# 访客每分钟最多 10 次请求,认证用户每分钟最多 60 次
Route::middleware('throttle:10|60,1')->group(function () {
});

# 组合限流
Route::middleware('auth:api', 'throttle:10|rate_limit,1')->group(function () {
    Route::get('/user', function () {});
});
throttle 通过 $request->user() 判断是否为认证用户。

throttle 通过 $request->user()->{$maxAttempts} 获取用户模型中的限流次数。

访问当前路由

$route = Route::current();
$name = Route::currentRouteName();
$action = Route::currentRouteAction();

小伍
139 声望4 粉丝