Laravel 的路由

Posted 小伍

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel 的路由相关的知识,希望对你有一定的参考价值。

路由文件

  • routes/web.phpweb 界面路由,使用 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();

以上是关于Laravel 的路由的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段11——vue路由的配置

VSCode自定义代码片段11——vue路由的配置

VSCode自定义代码片段11——vue路由的配置

laravel特殊功能代码片段集合

需要一种有效的方法来避免使用 Laravel 5 重复代码片段

Laravel:如何在控制器的几种方法中重用代码片段