1.基本路由
路由定义在routes目录下,路由执行是在控制器之前,
路由路径 routes目录下
api.php 关于接口路由定义
文件包含的路由位于 api 中间件组约束之内,支持频率限制功能,这些路由是无状态的。所以请求通过这些 路由进入应用需要通过 token 进行认证并且不能访问 Session 状态。
channle.php 面板
文件用于注册应用支持的所有事件Broadcast。
console.php 控制台定义
文件用于定义所有基于闭包的控制台命令。每个闭包都被绑定到一个控制台命令并且允许与命令行IO方法进行 交互。尽管这个文件并不定义HTTP路由,但是它定义了基于控制台的应用入口
web.php 所有的网站请求路由
2.路由类型定义:
Route::get("hello","HelloConroller@hello");
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
// 匹配 post 类型的请求方式
// 匹配 put 类型的请求方式
// 匹配 patch 类型的请求方式 // 匹配 delete 类型的请求方式 // 匹配 options 类型的请求方式
有的时候你可能需要注册一个可响应多个 HTTP 请求的路由,这时你可以使用 match 方法,也可以使 用 any 方法注册一个实现响应所有 HTTP 请求的路由:
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
// 匹配 post 类型的请求方式
// 匹配 put 类型的请求方式
// 匹配 patch 类型的请求方式 // 匹配 delete 类型的请求方式 // 匹配 options 类型的请求方式
Route::match(['get', 'post'], '/', function () { // 代码逻辑 });
Route::any('/', function () { // 代码逻辑 });

CSRF 保护:
指向 web 路由文件中定义的 POST 、 PUT 或 DELETE 路由的任何 HTML 表单都应该包含 一个 CSRF 令牌字段,否则,这个请求将会被拒绝。如果你希望设置一组不需要的 CSRF 保护的 URL, 可以通过将这类 URL 添加到 VerifyCsrfToken 中间件的 $except 属性来排除对这类路由的 CSRF 保 护,如下所示:
class VerifyCsrfToken extends Middleware
{
protected $addHttpCookie = true;

/**
* The URIs that should be excluded from CSRF verification.
* CSRF验证被排除在外的URI
* @var array
*/
protected $except = [
"http://test.laravel6.com:8002/foo",
"http://test.laravel6.com:8002/index",
//
];
}

路由重定向:
Route::redirect 默认会返回状态码 302 。 你可以通过第三个参数自定义返回码: 
Route::redirect('/here', '/there', 301);
视图路由:
Route::view('/welcome', 'welcome');
Route::view('/welcome', 'welcome', ['name' => 'Taylor']); 向视图传参

路由参数:
在路由中捕获一些 URL 片段。
例如,从 URL 中捕获用户的 ID,可以通过定义路由参数来执行 此操作
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/{name}', function ($name) { })->where('name', '[A-Za-z]+');
Route::get('user/{id}/{name}', function ($id, $name) { })->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
路由全局约束:
希望某个具体的路由参数都遵循同一个正则表达式的约束,就使用 pattern 方法在
RouteServiceProvider 的 boot 方法中定义这些模式
/**
* 定义你的路由模型绑定, pattern 过滤器等。 *
*/
public function boot()
{
Route::pattern('id', '[0-9]+');
parent::boot();
}
// 一旦定义好之后,便会自动应用这些规则到所有使用该参数名称的路由上: Route::get('user/{id}', function ($id) { // 只有在 id 为数字时才执行 });

路由命名:
路由命名可以方便地为指定路由生成 URL 或者重定向。通过在路由定义上链式调用 name 方法可以指 定路由名称:
Route::get('user/profile', function () {})->name('profile');
// 你还可以指定控制器行为的路由名称:
Route::get('user/profile', 'UserProfileController@show')->name('profile');

生成制定路由的url:
为路由指定了名称后,就可以使用全局辅助函数 route 来生成链接或者重定向到该路由
生成 URL... $url = route('profile'); 
生成重定向... return redirect()->route('profile');
route()函数可以写在视图模板中,生成url地址
// 如果是有定义参数的命名路由,可以把参数作为 route 函数的第二个参数传入,指定的参数将会自动 插入到 URL 中对应的位置:
Route::get('user/{id}/profile', function ($id) { })->name('profile');
$url = route('profile', ['id' => 1]);

检查当前路由:
判断当前请求是否指向了某个命名过的路由,你可以调用路由实例上的 named 方法。
例如,你可以在路由中间件中检查当前路由名称:
public function handle($request, Closure $next)
{
dd($request); 打印request请求
if ($request->route()->named('profile')) { //
}
return $next($request);
}

路由中间件:
给路由组中所有的路由分配中间件,可以在 group 之前调用 middleware 方法,中间件会依照它们 在数组中列出的顺序来运行:
1.1 创建路由 php artisan make:middleware CheckRoute
1.2 Kernel.php protected $routeMiddleware 数组中添加中间件映射,不做映射中间件不会被引入 
'checkRoute' => \App\Http\Middleware\CheckRoute::class,
public function handle($request, Closure $next)
{
// 1.要想此路由中间件检测 路由名称是否存在,需要在 kernel.php 做映射
// 2. middleware("name") 方法检测
dd($request->route());
if($request->route()->named("ffff"))
{
dd($request);
return false;
}
return $next($request);
}
Route::middleware(['first', 'second'])->group(function () { 
Route::get('/', function () { // 使用 first 和 second 中间件 });
Route::get('user/profile', function () { // 使用 first 和 second 中间件}); 
});

路由命名空间:
使用namespace方法将相同的PHP命名空间分配给路由组的中所有的控制器,请注意,默认情况下,RouteServiceProvider会在命名空间组中引入你的路由文件,让你不用指定完整的App\Http\Controllers命名空间前缀就能注册控制器路由。因此,你只需要指定命名空间App\Http\Controllers 之后的部分。
Route::namespace('Admin')->group(function () {
// 在 「App\Http\Controllers\Admin」 命名空间下的控制器
});

子域名路由:
路由组也可以用来处理子域名。子域名可以像路由URI一样被分配路由参数允许你获取一部分子域名作为参数给路由或控制器使用。可以在定义group之前调用 domain 方法来指定子域名:
Route::domain('{account}.myapp.com')->group(function () { 
Route::get('user/{id}', function ($account, $id) { });
});

路由前缀:
可以用 prefix 方法为路由组中给定的 URL 增加前缀。
例如,你可以为组中所有路由的URI 加上 admin 前缀:
Route::prefix('admin')->group(function () { 
Route::get('users', function () {
// 匹配包含 /admin/users 的 URL 
});
});
路由名称前缀:
name()方法可以用来给路由组中的每个路由名称添加一个给定的字符串.
例如,您可能希望以home为所有分组路由的名称加前缀
// name("home.")模块 namespace("Home") 命名空间下 HelloController@foo
Route::name("home.")->namespace("Home")->group(function (){
Route::get("HelloController@foo")->name("foo");
});

回退路由:
使用 Route::fallback 方法
你可以定义一个在没有其他路由可匹配传入的请求时,才执行的路由。一般来说,未处理的请求会通过应用程序的异常处理程序自动呈现404页面。但是因为你可以在routes/web.php文件中定义fallback路由,web中间件组中的所有中间件都将应用到路由中。当然,你也可以根据需要向这条路由中添加额外的中间件:
Route::fallback(function () {});

访问控制:
Laravel 包含了一个中间件,用于控制应用程序对路由的访问.如果想要使用,请将throttle中间件分配给一个路由或者一个路由组.throttle中间件会接收两个参数,这两个参数决定了在给定的分钟数内可以进行的最大请求数。
例如,让我们指定一个经过身份验证并且用户每分钟访问频率不超过60次的路由组:
Route::middleware('auth:api', 'throttle:60,1')->group(function () { 
Route::get('/user', function () { });
});

动态访问控制:
你可以根据已验证的User模型的属性,指定动态请求的最大值。
例如,如果你的User模型包含rate_limit属性,则可以将属性名称传递给throttle 中间件,以便它用于计算最大请求数:
Route::middleware('auth:api', 'throttle:rate_limit,1')->group(function () { Route::get('/user', function () { });
});

独立访客和认证用户的访问控制:
您可以为访客和经过身份验证的用户指定不同的访问控制。
例如,可以为访客指定每分钟最多10次请求,为认证用户设置每分钟最多60次请求:
Route::middleware('throttle:10|60,1')->group(function () { });
您还可以将此功能与动态访问控制相结合。
例如,如果User模型包含一个rate_limit属性,您可以将该属性的名称传递给throttle 中间件,以便用于计算认证用户的最大请求数:
Route::middleware('auth:api', 'throttle:10|rate_limit,1')->group(function () { Route::get('/user', function () { });
});

laravel6.0路由的更多相关文章

  1. vue 2.0 路由切换以及组件缓存源代码重点难点分析

    摘要 关于vue 2.0源代码分析,已经有不少文档分析功能代码段比如watcher,history,vnode等,但没有一个是分析重点难点的,没有一个是分析大命题的,比如执行router.push之后 ...

  2. $Django 虚拟环境,2.0、1.0路由层区别,Httprequest对象,视图层(fbv,cbv),文件上传

    1 虚拟环境:解决问题同一台机器上可以运行不同版本的django,  1 用pychanrm创建--->files-->newproject--->选择虚拟环境  2 setting ...

  3. vue2.0路由

    现在用vue-cli搭建的环境里面vue-router是下载好的 vue2.0路由方式和以前也有些不同 没了了map和start方法 目录结构如上图 这里有三个文件,app.vue显示,main.js ...

  4. Django2.0路由层-URLconf

    目录 DJango2.0路由层-URLconf 概述 urlpatterns 实例 path转换器 自定义path转换器 使用正则表达式 命名组(有名分组) URLconf匹配请求URL中的哪些部分 ...

  5. vue2.0路由写法、传参和嵌套

    前置知识请戳这里 vue-routerCDN地址:https://unpkg.com/vue-router@3.0.1/dist/vue-router.js vue-router下载地址:https: ...

  6. Django day05 虚拟环境 django 2.0和django 1.0 路由层区别

    一:虚拟环境 创建虚拟环境一般有三种方式: 1)   File--->New Project--> 出现如下图,点击Project Interpreter:New Virtualenv e ...

  7. ThinkPHP5.0框架开发--第4章 TP5.0路由

    ThinkPHP5.0框架开发--第4章 TP5.0路由 第4章 TP5.0 路由 ================================================== 上次复习 1. ...

  8. laravel6.0控制器-资源控制器

    控制器:控制器用来处理业务的,不应该处理逻辑,如果是小项目可以把逻辑写到控制器里,大点的项目应该抽离出来业务处理层如下:services业务处理层:比如:获取值,验证值,异常捕获命名规则:控制器名:用 ...

  9. [译]ASP.NET Core 2.0 路由引擎

    问题 ASP.NET Core 2.0的路由引擎是如何工作的? 答案 创建一个空项目,为Startup类添加MVC服务和请求中间件: public void ConfigureServices(ISe ...

随机推荐

  1. 【HDU4622】Reincarnation

    [HDU4622]Reincarnation 一眼似乎不可做,但发现\(strlen(x)\)很小,暴力\(O(n^2)\)预处理每个区间\((l,r)\),查询时\(O(1)\)输出就好了 #inc ...

  2. Centos-7修改yum源(阿里yum源)

    国外地址yum源下载慢,下到一半就断了,就这个原因就修改它为国内yum源地址 国内yum源: 阿里centos7 yum源:http://mirrors.aliyun.com/repo/Centos- ...

  3. GO windows下编译luajit

    1 GO嵌入luajit需要用到cgo,使用cgo需要安装gcc,在windows上下载MinGW-W64安装上配置好环境变量就可以 2 gcc编译luajit,生成.a文件. 把LuaJIT-2.0 ...

  4. php手记之03-tp5渲染视图

    // 渲染视图 模块@文件/文件名 // return view('index@index/test'); // return view('index@test/test'); // return $ ...

  5. vue——vuex安装及使用

    一.vuex 的理解 官方解释:vuex是一个专为vue.js应用程序开发的状态管理模式.采用集中式存储管理应用的所有的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 我的理解:全局变量,同 ...

  6. es6对象复制合并 Object.assign

    对象的复制 var obj= { a: 1 }; var copy = Object.assign({}, obj); console.log(copy); //{ a: 1 } 对象的合并和封装 v ...

  7. 阶段5 3.微服务项目【学成在线】_day17 用户认证 Zuul_16-网关-过虑器

    4.5 过虑器 Zuul的核心就是过虑器,通过过虑器实现请求过虑,身份校验等. 4.5.1 ZuulFilter 自定义过虑器需要继承 ZuulFilter,ZuulFilter是一个抽象类,需要覆盖 ...

  8. Nginx在线服务状态下平滑升级或新增模块

    nginx在使用过程中,有时需要在不影响当前业务的情况下,进行升级或新增模块.nginx的升级有两种方法:1.半自动化升级:2.手动升级 不过都需要先查看安装的nginx版本和配置信息,然后前往官网下 ...

  9. spark中的cache和persist的区别

    在使用中一直知其然不知其所以然的地使用RDD.cache(),系统的学习之后发现还有一个与cache功能类似看起来冗余的persist 点进去一探究竟之后发现cache()是persist()的特例, ...

  10. PAT 甲级 1041 Be Unique (20 分)(简单,一遍过)

    1041 Be Unique (20 分)   Being unique is so important to people on Mars that even their lottery is de ...