laravel5.8(五)基本路由配置

简介: 在使用laravel之前我一直在使用thinkphp还有yii框架,这两个框架也有路由这一说,但是都没有用过。Laravel的路由功能其实还是挺全的,也很优雅~下面来说正题:1:路由的基本介绍Laravel框架默认为我们提供了两个路由文件,在根目录下的routes目录下有web.php以及api.php。这些文件通过框架自动加载,相应逻辑位于 app/Providers/RouteServiceProvider 类。routes/web.php 文件定义了 Web 界面的路由,这些路由被分配到了 web 中间件组,从而可以使用 Session 和 CSRF 保护等功能。routes/a

在使用laravel之前我一直在使用thinkphp还有yii框架,这两个框架也有路由这一说,但是都没有用过。

Laravel的路由功能其实还是挺全的,也很优雅~

下面来说正题:

1:路由的基本介绍

Laravel框架默认为我们提供了两个路由文件,在根目录下的routes目录下有web.php以及api.php。这些文件通过框架自动加载,相应逻辑位于 app/Providers/RouteServiceProvider 类。routes/web.php 文件定义了 Web 界面的路由,这些路由被分配到了 web 中间件组,从而可以使用 Session 和 CSRF 保护等功能。routes/api.php 中的路由是无状态的,这是因为被分配到了 api 中间件组。

一般情况下,我们都会使用web.php来开始定义路由。定义在 routes/web.php 中的路由可以通过在浏览器地址栏输入相应的 URL 进行访问,例如,你可以通过 blog.test/user 访问下面的路由:

php

复制代码

Route::get('/user', 'UsersController@index');

正如前面所提到的,定义在 routes/api.php 文件中的路由通过 app/Providers/RouteServiceProvider 的处理被嵌套在一个路由群组中, 在这个群组中,所有路由会被自动添加 /api 前缀,所以你不需要再到路由文件中为每个路由手动添加,你可以通过编辑 RouteServiceProvider 类来修改路由前缀以及其他的路由群组选项:

php

复制代码

/**
     * Define the "api" routes for the application.
     *
     * These routes are typically stateless.
     *
     * @return void
     */
    protected function mapApiRoutes()
    {
        Route::prefix('api')
            ->middleware('api')
            ->namespace($this->namespace)
            ->group(base_path('routes/api.php'));
    }

2:有效的路由方法

我们可以注册路由来响应任何 HTTP 请求动作:

php

复制代码

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

3:路由重定向

如果你需要定义一个重定向到其他 URI 的路由,可以使用 Route::redirect 方法,该方法非常方便,以至于你不需要再定义额外的路由或控制器来执行简单的重定向逻辑:

php

复制代码

Route::redirect('/here', '/there');

其中 here 表示原路由,there 表示重定向之后的路由。默认情况下,Route::redirect 返回 302 状态码,你可以使用可选的第三个参数来自定义这个状态码:

php

复制代码

Route::redirect('/here', '/there', 301);

你还可以使用 Route::permanentRedirect 方法来返回 301 状态码:

php

复制代码

Route::permanentRedirect('/here', '/there');

4:路由参数

(1):必选参数

单个参数

php

复制代码

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

多个参数

php

复制代码

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

(2):可选参数

php

复制代码

Route::get('user/{name?}', function ($name = null) {
    return $name;
});

5:路由分组

(1):中间件路由分组

要给某个路由分组中定义的所有路由分配中间件,可以在定义分组之前使用 middleware 方法。中间件将会按照数组中定义的顺序依次执行:

php

复制代码

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

(2):路由前缀

prefix 方法可以用来为分组中每个路由添加一个给定 URI 前缀,例如,你可以为分组中所有路由 URI 添加 admin 前缀 :

php

复制代码

Route::prefix('admin')->group(function () {
    Route::get('users', function () {
        // Matches The "/admin/users" URL
    });
});

6:兜底路由

使用 Route::fallback 方法可以定义一个当所有其他路由都未能匹配请求 URL 时所执行的路由。通常,未处理请求会通过 Laravel 的异常处理器自动渲染一个「404」页面,不过,如果你在 routes/web.php 文件中定义了 fallback 路由的话,所有 web 中间件组中的路由都会应用此路由作为兜底,当然,如果需要的话,你还可以添加额外的中间件到此路由:

php

复制代码

Route::fallback(function () {
    //
});

7:频率限制

Laravel 自带了一个中间件用于限制对应用路由的访问频率。开始使用该功能之前,分配 throttle 中间件到某个路由或路由分组,throttle 中间件接收两个参数用于判断给定时间内(单位:分钟)的最大请求次数。例如,我们指定登录用户每分钟只能访问下面的分组路由 60 次:

php

复制代码

Route::middleware('auth:api', 'throttle:60,1')->group(function () {
    Route::get('/user', function () {
        //
    });
});

超出访问次数后,会返回 429 状态码并提示「Too many requests」。

动态频率限制

此外,还可以基于 User 模型的属性来动态设置最大请求次数。例如,如果 User 模型包含 rate_limit 属性,就可以将其这个属性名传递到 throttle 中间件,这样就可以将属性值作为计算最大请求次数的数据来源:

php

复制代码

Route::middleware('auth:api', 'throttle:rate_limit,1')->group(function () {
    Route::get('/user', function () {
        //
    });
});

8:获取当前访问路由属性

你可以使用 Route 门面上的 current、currentRouteName 和 currentRouteAction 方法来访问处理当前输入请求的路由信息:

php

复制代码

// 获取当前路由实例
$route = Route::current();
// 获取当前路由名称
$name = Route::currentRouteName();
// 获取当前路由action属性
$action = Route::currentRouteAction();

以上大概就是路由的基本知识,有好的建议,请在下方输入你的评论。

欢迎访问个人博客 guanchao.site

欢迎访问我的小程序:打开微信->发现->小程序->搜索“时间里的”

目录
相关文章
|
Linux Docker 容器
用Docker-Compose一分钟搭建Wordpress博客系统
用Docker-Compose一分钟搭建Wordpress博客系统
769 0
用Docker-Compose一分钟搭建Wordpress博客系统
|
Web App开发 域名解析 缓存
如何在 Ubuntu 20.04 上安装 Node.js 和 npm
本文我们主要为大家介绍在 Ubuntu 20.04 上安装 Node.js 和 npm 的三种不同的方式。
167220 7
如何在 Ubuntu 20.04 上安装 Node.js 和 npm
|
1月前
|
弹性计算 人工智能 安全
阿里云服务器ECS活动解析:轻量应用服务器、通用算力型u2a、九代云服务器多样选择
2026年阿里云弹性计算云服务器爆款直降活动涵盖新客首单68元起、99元套餐续费同价、u2a实例2.5折、九代云服务器6.4折、云产品组合购等多重优惠,适配个人开发者、小微企业及初创企业需求。
|
5月前
|
算法 API 数据安全/隐私保护
电商 API 双平台实战:淘宝 item.get + 京东 item_detail 对接指南(附可复用代码 + 问题排查)
本文详细解析了淘宝和京东双平台API对接的核心流程,涵盖资质申请、凭证获取、签名生成、高频接口调用及常见问题解决方案,助力开发者高效实现商品数据同步与管理。
|
5月前
|
JSON 数据库连接 数据格式
Python异常处理最佳实践:避免 try-except 滥用的3个核心原则
本文剖析Python异常处理的常见误区,提出避免滥用try-except的三大原则:精准捕获可预见异常、显式暴露错误、善用上下文管理器。结合真实案例,讲解如何写出健壮且易维护的代码,提升开发效率与程序可靠性。(238字)
303 0
|
2月前
|
运维 Java Serverless
Serverless 架构模式深度解析
Serverless并非“无服务器”,而是开发者无需管理服务器,专注业务逻辑。具备按需付费、弹性伸缩、事件驱动等优势,适用于突发流量、定时任务等场景,结合FaaS与BaaS可构建高效应用,是云原生发展的重要方向。
376 1
|
3月前
|
缓存 网络协议 Linux
Linux系统下 nslookup命令的基本使用
Linux系统下 nslookup命令的基本使用
1633 3
Linux系统下 nslookup命令的基本使用
|
缓存 应用服务中间件 PHP
502错误是nginx返回的吗(502错误和nginx有关系吗)
本文详细介绍了Nginx出现502 Bad Gateway错误的原因及解决方法,包括缓冲区错误、Header过大和PHP-CGI进程不足等问题,并提供了增大缓冲区、调整Header大小及增加PHP-CGI进程数量的具体步骤。此外,还解释了502错误的含义及其可能原因,如上游服务器故障、网络故障和配置错误,并给出了检查上游服务器、代理配置及联系网络管理员等多种解决方案。以上内容仅供参考,具体操作需根据实际情况调整。
5379 4
|
8月前
|
监控 算法 数据处理
内网实时监控中的 C# 算法探索:环形缓冲区在实时数据处理中的关键作用
本文探讨了环形缓冲区在内网实时监控中的应用,结合C#实现方案,分析其原理与优势。作为固定长度的循环队列,环形缓冲区通过FIFO机制高效处理高速数据流,具备O(1)时间复杂度的读写操作,降低延迟与内存开销。文章从设计逻辑、代码示例到实际适配效果展开讨论,并展望其与AI结合的潜力,为开发者提供参考。
363 2
|
7月前
|
人工智能 算法 机器人
人工智能浪潮下的人类社会:重构秩序,还是共舞未来?
人工智能正以前所未有的速度改变社会结构,从工具变为行为参与者。它不仅提升效率,更具备学习、生成与决策能力,重塑就业、法律、财富分配乃至国家治理模式。面对AI风暴,唯有制度创新与全民共享,方能避免技术垄断与社会失衡。
292 0