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 ...
随机推荐
- awk如何传递外部变量?
第一种: [root@master yjt]# var=1 [root@master yjt]# echo |awk -v value=$var '{print value}' 1 第二种: [roo ...
- CSS Pixel 和 Device pixels
Web developers need CSS pixels, that is, the pixels that are used in CSS declarations such as " ...
- [转]解决Git报错:error: You have not concluded your merge (MERGE_HEAD exists).
Git fetch和git pull的区别: 都可以从远程获取最新版本到本地 1.Git fetch:只是从远程获取最新版本到本地,不会merge(合并) $:git fetch origin mas ...
- postgresql 的 .pgpass密码文件的使用
pgpass 是 连接 postgresql 时使用的密码文件,通常位置为 ~/.pgpass.在使用某些组件时还真的必须使用.具体的格式为: hostname:port:database:usern ...
- 如何获取UA?
代码: function whatBrowser() { document.Browser.Name.value = navigator.appName; document.Browser.Versi ...
- Java 内存模型学习笔记
1.Java类 public class Math { public static final Integer CONSTANT = 666; public int math(){ int a = 1 ...
- 将bat文件注册成为系统服务
第一章 注册系统服务准备 1.1 注册系统服务前准备 1.1.1 涉及第三方软件 Bat_To_Exe_Converter.exe (将*.bat文件转化为可执行*.exe文件) insts ...
- LoadRunner11下载、安装与破解
目前LoadRunner最新版本已经更新到LR12了,但是只有试用版本,最多只支持50人的并发,所以我们还是只能用LR11的破解版,毕竟商用 版是真的很贵,一般企业怕是都不会去购买. 1.LoadRu ...
- ISO/IEC 9899:2011 条款6.2.4——对象的存储持久性
6.2.4 对象的存储持久性 1.一个对象具有一个存储持久性来确定其生命周期.一共有四种存储持久性:静态的,线程的,自动的,以及分配的.分配存储在7.22.3中描述. 2.一个对象的生命周期是程序执行 ...
- com.alibaba.fastjson.JSONObject;的使用
转: com.alibaba.fastjson.JSONObject;的使用 2018-11-04 23:51:23 mameng1998 阅读数 6404更多 分类专栏: java 1 POM ...