laravel6.0路由
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路由的更多相关文章
- vue 2.0 路由切换以及组件缓存源代码重点难点分析
摘要 关于vue 2.0源代码分析,已经有不少文档分析功能代码段比如watcher,history,vnode等,但没有一个是分析重点难点的,没有一个是分析大命题的,比如执行router.push之后 ...
- $Django 虚拟环境,2.0、1.0路由层区别,Httprequest对象,视图层(fbv,cbv),文件上传
1 虚拟环境:解决问题同一台机器上可以运行不同版本的django, 1 用pychanrm创建--->files-->newproject--->选择虚拟环境 2 setting ...
- vue2.0路由
现在用vue-cli搭建的环境里面vue-router是下载好的 vue2.0路由方式和以前也有些不同 没了了map和start方法 目录结构如上图 这里有三个文件,app.vue显示,main.js ...
- Django2.0路由层-URLconf
目录 DJango2.0路由层-URLconf 概述 urlpatterns 实例 path转换器 自定义path转换器 使用正则表达式 命名组(有名分组) URLconf匹配请求URL中的哪些部分 ...
- vue2.0路由写法、传参和嵌套
前置知识请戳这里 vue-routerCDN地址:https://unpkg.com/vue-router@3.0.1/dist/vue-router.js vue-router下载地址:https: ...
- Django day05 虚拟环境 django 2.0和django 1.0 路由层区别
一:虚拟环境 创建虚拟环境一般有三种方式: 1) File--->New Project--> 出现如下图,点击Project Interpreter:New Virtualenv e ...
- ThinkPHP5.0框架开发--第4章 TP5.0路由
ThinkPHP5.0框架开发--第4章 TP5.0路由 第4章 TP5.0 路由 ================================================== 上次复习 1. ...
- laravel6.0控制器-资源控制器
控制器:控制器用来处理业务的,不应该处理逻辑,如果是小项目可以把逻辑写到控制器里,大点的项目应该抽离出来业务处理层如下:services业务处理层:比如:获取值,验证值,异常捕获命名规则:控制器名:用 ...
- [译]ASP.NET Core 2.0 路由引擎
问题 ASP.NET Core 2.0的路由引擎是如何工作的? 答案 创建一个空项目,为Startup类添加MVC服务和请求中间件: public void ConfigureServices(ISe ...
随机推荐
- css3 perspective与translateZ变换
css3中的坐标系,rotateX就是绕着x轴旋转,rotateY就是绕着Y轴旋转,rotateZ就是绕着z轴旋转(也就是xy平面的旋转). perspective属性用来设置视点,在css3的模型中 ...
- springboot开启gzip压缩
springboot 2.x开启gzip压缩 1.application.yml配置 server: compression: enabled: true min-response-size: mim ...
- 2019-06-03 校内python模拟题解(所有非原题)
一起来女装吧 本题改编自USACO(USA Computing Olympiad) 1.1节的第一题 (感谢lsy同学对本题题面的贡献) 直接计算就好了 chr:将ASCII码转成字符 ord:字符对 ...
- 【2018.08.01】(表/栈/队列/大小顶堆)学习Stark和Queue算法小记
Train Problem I As the new term comes, the Ignatius Train Station is very busy nowadays. A lot of st ...
- mysql 设置/查看mysql连接数
mysql数据库连接数过多导致系统出错,系统不能连接数据库,关键要看两个数据: 1.数据库系统允许的最大可连接数max_connections.这个参数是可以设置的.如果不设置,默认是100.最大是1 ...
- win10 sedlauncher.exe占用cpu处理
打开应用和功能,搜KB4023057,然后卸载. 打开系统服务,找到Windows Remediation Service (sedsvc)和Windows Update Medic Service ...
- 微信小程序 位置定位position详解,相对定位relative,绝对定位absolute相关问题
一.位置position[定位属性:static,relative,absolute,fixed,inherit,-ms-page,initial,unset] 1.static:元素框正常生成,块级 ...
- Windows下安装ActiveMQ
到官网(http://activemq.apache.org/download-archives.html)下载最新发布的压缩包(我下的是5.15.9)到本地后解压(我解压到D盘Dev目录下)即可.进 ...
- java@ 注解原理与使用
Java反射 java反射机制的定义: 在运行转态时(动态的)时. 对于任意一个类,都能够知道这个类的所有属性和方法 对于任意一个对象,都能够知道调用它的任意属性和方法 Class对象 java中用对 ...
- MySQL数据库表的设计和优化(上)
一.单表设计与优化: (1)设计规范化表,消除数据冗余(以使用正确字段类型最明显):数据库范式是确保数据库结构合理,满足各种查询需要.避免数据库操作异常的数据库设计方式.满足范式要求的表,称为规范化表 ...