设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间19 现在时间19 缓存数据 2月14号,321+4天的聊天记录灰了…只恨不够成熟优秀的自己守护不住最爱的nono…

2月14号,321+4天的聊天记录灰了…只恨不够成熟优秀的自己守护不住最爱的nono… -- 有可能的夜晚

查看: 1000|回复: 0

PHP laravel实现基本路由配置详解

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:236
  • 打卡月天数:0
  • 打卡总奖励:3537
  • 最近打卡:2025-04-14 17:50:04
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
410
主题
358
精华
0
金钱
4716
积分
847
注册时间
2023-1-6
最后登录
2025-4-14

发表于 2023-2-12 09:55:32 | 显示全部楼层 |阅读模式
在使用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 访问下面的路由:
  1. Route::get('/user', 'UsersController@index');
复制代码
正如前面所提到的,定义在 routes/api.php 文件中的路由通过 app/Providers/RouteServiceProvider 的处理被嵌套在一个路由群组中, 在这个群组中,所有路由会被自动添加 /api 前缀,所以你不需要再到路由文件中为每个路由手动添加,你可以通过编辑 RouteServiceProvider 类来修改路由前缀以及其他的路由群组选项:
  1. /**
  2.      * Define the "api" routes for the application.
  3.      *
  4.      * These routes are typically stateless.
  5.      *
  6.      * @return void
  7.      */
  8.     protected function mapApiRoutes()
  9.     {
  10.         Route::prefix('api')
  11.             ->middleware('api')
  12.             ->namespace($this->namespace)
  13.             ->group(base_path('routes/api.php'));
  14.     }
复制代码
2.有效的路由方法

我们可以注册路由来响应任何 HTTP 请求动作:
  1. Route::get($uri, $callback);
  2. Route::post($uri, $callback);
  3. Route::put($uri, $callback);
  4. Route::patch($uri, $callback);
  5. Route::delete($uri, $callback);
  6. Route::options($uri, $callback);
复制代码
3.路由重定向

如果你需要定义一个重定向到其他 URI 的路由,可以使用 Route::redirect 方法,该方法非常方便,以至于你不需要再定义额外的路由或控制器来执行简单的重定向逻辑:
  1. Route::redirect('/here', '/there');
复制代码
其中 here 表示原路由,there 表示重定向之后的路由。默认情况下,Route::redirect 返回 302 状态码,你可以使用可选的第三个参数来自定义这个状态码:
  1. Route::redirect('/here', '/there', 301);
复制代码
你还可以使用 Route::permanentRedirect 方法来返回 301 状态码:
  1. Route::permanentRedirect('/here', '/there');
复制代码
4.路由参数

(1):必选参数
单个参数
  1. Route::get('user/{id}', function ($id) {
  2.     return 'User ' . $id;
  3. });
复制代码
多个参数
  1. Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
  2.     return $postId . '-' . $commentId;
  3. });
复制代码
(2):可选参数
  1. Route::get('user/{name?}', function ($name = null) {
  2.     return $name;
  3. });
复制代码
5.路由分组

(1):中间件路由分组
要给某个路由分组中定义的所有路由分配中间件,可以在定义分组之前使用 middleware 方法。中间件将会按照数组中定义的顺序依次执行:
  1. Route::middleware(['first', 'second'])->group(function () {
  2.     Route::get('/', function () {
  3.         // Uses first & second Middleware
  4.     });
  5.   
  6.     Route::get('user/profile', function () {
  7.         // Uses first & second Middleware
  8.     });
  9. });
复制代码
(2):路由前缀
prefix 方法可以用来为分组中每个路由添加一个给定 URI 前缀,例如,你可以为分组中所有路由 URI 添加 admin 前缀 :
  1. Route::prefix('admin')->group(function () {
  2.     Route::get('users', function () {
  3.         // Matches The "/admin/users" URL
  4.     });
  5. });
复制代码
6.兜底路由

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

Laravel 自带了一个中间件用于限制对应用路由的访问频率。开始使用该功能之前,分配 throttle 中间件到某个路由或路由分组,throttle 中间件接收两个参数用于判断给定时间内(单位:分钟)的最大请求次数。例如,我们指定登录用户每分钟只能访问下面的分组路由 60 次:
  1. Route::middleware('auth:api', 'throttle:60,1')->group(function () {
  2.     Route::get('/user', function () {
  3.         //
  4.     });
  5. });
复制代码
超出访问次数后,会返回 429 状态码并提示「Too many requests」。
动态频率限制
此外,还可以基于 User 模型的属性来动态设置最大请求次数。例如,如果 User 模型包含 rate_limit 属性,就可以将其这个属性名传递到 throttle 中间件,这样就可以将属性值作为计算最大请求次数的数据来源:
  1. Route::middleware('auth:api', 'throttle:rate_limit,1')->group(function () {
  2.     Route::get('/user', function () {
  3.         //
  4.     });
  5. });
复制代码
8.获取当前访问路由属性

你可以使用 Route 门面上的 current、currentRouteName 和 currentRouteAction 方法来访问处理当前输入请求的路由信息:
  1. // 获取当前路由实例
  2. $route = Route::current();
  3. // 获取当前路由名称
  4. $name = Route::currentRouteName();
  5. // 获取当前路由action属性
  6. $action = Route::currentRouteAction();
复制代码
到此这篇关于PHP laravel实现基本路由配置详解的文章就介绍到这了,更多相关PHP laravel路由配置内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表