1. 什么是路由
路由是指路由器从一个接口上收到数据包,根据数据包的目的地址进行定向并转发到另一个接口的过程。简单来说路由就是一个访问到控制器方法的一个Url地址。
2. 路由的创建方式
Route::请求方式('请求的url', 匿名函数或者响应的控制器方法);
例如:
Route::get('foo', function () {
return 'Hello World';
});
路由允许的请求方式分为下面六种:
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
有的时候你可能需要注册一个可响应多个 HTTP 请求的路由,这时你可以使用 match 方法,也可以使用 any 方法注册一个实现响应所有 HTTP 请求的路由::
1.表示匹配到get和post两种请求方式的路由
Route::match(['get', 'post'], '/', function () {
//
});
2.表示任意请求方式的路由
Route::any('/', function () {
//
});
注意:指向web路由文件中定义的POST,PUT,PATCH, 或DELETE路由的任何 HTML 表单都应该包含一个 CSRF 令牌字段,否则,这个请求将会被拒绝。
<form method="POST" action="/profile">
@csrf
...
form>
视图路由
如果你的路由只需要返回一个视图, 你可以使用 Route::view 方法。它和 redirect 一样,提供了一个简单的方式,而无需定义完整的路由或控制器。view 方法接受一个 URI 作为第一个参数,一个视图名作为第二个参数。此外,还可以通过第三个可选参数将一个数据数组传递给视图:
Route::view('/welcome', 'welcome');
Route::view('/welcome', 'welcome', ['name' => 'Taylor']);
3. 路由命名
路由命名可以方便地为指定路由生成 URL 或者重定向。通过在路由定义上链式调用 name 方法可以指定路由名称:
Route::get('user/profile', function () {
//
})->name('profile');
4.正则表达式约束
你可以使用路由实例上的 where 方法约束路由参数的格式。where 方法接受参数名称和定义参数应如何约束的正则表达式:
Route::get('user/{name}', function ($name) {
//
})->where('name', '[A-Za-z]+');
Route::get('user/{id}', function ($id) {
//
})->where('id', '[0-9]+');
Route::get('user/{id}/{name}', function ($id, $name) {
//
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
5.路由组
prefix方法将会为路由组中的每一个 URI 添加前缀。例如,您可以给该组中所有的 URI 添加admin的前缀:
Route::prefix('admin')->group(function () {
Route::get('users', function () {
// Matches The "/admin/users" URL
});
});
6. 回退路由
回退路由
使用 Route::fallback 方法, 您可以定义一个在没有其他路由可匹配传入的请求时才执行的路由。一般来说,未处理的请求会通过应用程序的异常处理程序自动呈现 「404」 页面。但是由于您可以在 routes/web.php 文件中定义 fallback 路由,因此 web 中间件组中的所有中间件都将应用于该路由。当然,您也可以根据需要随意向此路由添加其他中间件
Route::fallback(function () {
//
});
7. 定义限流器
Laravel 包含功能强大且可自定义的限流服务,您可以利用这些服务来限制给定的路由或一组路由的流量。首先,您应该定义满足应用需求的限流器配置。通常,这可以写在应用程序的 RouteServiceProvider 中。
限流器可以使用 RateLimiter 门面的 for 方法定义。for 方法接受一个速率限制器名称和一个闭包会返回限制配置,该配置可以应用于分配了该限流器的路由:
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Support\Facades\RateLimiter;
RateLimiter::for('global', function (Request $request) {
return Limit::perMinute(1000);
});
原文:https://zhuanlan.zhihu.com/p/268416732
![aa2a49d16410db17d21f4c033e6510c0.png](https://img-blog.csdnimg.cn/img_convert/aa2a49d16410db17d21f4c033e6510c0.png)
![681f6c1316353a06ee163ac8413da677.gif](https://img-blog.csdnimg.cn/img_convert/681f6c1316353a06ee163ac8413da677.gif)
![3864c90edcebed71324c8f0c8bd3b573.png](https://img-blog.csdnimg.cn/img_convert/3864c90edcebed71324c8f0c8bd3b573.png)
想要获取学习实战、高并发、架构 、笔试面试资料请扫码咨询+薇薇微信