路由文件
- 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();