laravel6.0路由

1.基本路由
路由定义在routes目录下,路由执行是在控制器之前,
路由路径 routes目录下
api.php 关于接口路由定义
文件包含的路由位于 api 中间件组约束之内,支持频率限制功能,这些路由是无状态的。所以请求通过这些 路由进入应用需要通过 token 进行认证并且不能访问 Session 状态。
channle.php 面板
文件用于注册应用支持的所有事件Broadcast。
console.php 控制台定义
文件用于定义所有基于闭包的控制台命令。每个闭包都被绑定到一个控制台命令并且允许与命令行IO方法进行 交互。尽管这个文件并不定义HTTP路由,但是它定义了基于控制台的应用入口
web.php 所有的网站请求路由
2.路由类型定义:
Route::get("hello","[email protected]");
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‘, ‘[email protected]‘)->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") 命名空间下 [email protected]
Route::name("home.")->namespace("Home")->group(function (){
Route::get("[email protected]")->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 () { });
});

原文地址:https://www.cnblogs.com/dreamofprovence/p/11784859.html

时间: 2024-10-18 01:32:38

laravel6.0路由的相关文章

Vue2.0的变化(2)———vue2.0动画的变化、vue-2.0路由的变化

之前讲解的都是vue1.0的使用,现在我们开始介绍vue2.0,这里的介绍是在vue1.0的基础上进行介绍的,主要介绍的是同vue1.0版本相比2.0的变化 vue2.0动画的变化:现在变成: <transition> 运动东西(元素,属性,路由.....); </transition> class的定义: .fade-enter{} //初始状态 .fade-enter-active{} //变化成什么样 --当元素出来(显示) .fade-leave{} //可不写 .fade

vue2.0路由嵌套

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>vue2.0路由嵌套2</title> <script type="text/javascript" src="js/vue2.0.js" ></script> <script type="text/javascrip

vue2.0路由

现在用vue-cli搭建的环境里面vue-router是下载好的 vue2.0路由方式和以前也有些不同 没了了map和start方法 目录结构如上图 这里有三个文件,app.vue显示,main.js控制路由,goods.vue为跳转页面 app.vue template> <div id="app"> <v-header></v-header> <div class="tab"> <div class=&

vue2.0路由写法和传参

前置知识请戳这里 vue-routerCDN地址:https://unpkg.com/[email protected]/dist/vue-router.js vue-router下载地址:https://github.com/vuejs/vue-router/tree/dev/dist vue2.0路由基本写法 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title&

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

控制器: 控制器用来处理业务的,不应该处理逻辑,如果是小项目可以把逻辑写到控制器里,大点的项目应该抽离出来业务处理层如下: services业务处理层:比如:获取值,验证值,异常捕获 命名规则: 控制器名:用大驼峰命名 如:HelloController: 方法名:用小驼峰 如:helloWorld(); 成员变量:小驼峰 或者 _名称 创建控制器(可以自定义目录): php artisan make:controller UserController php artisan make:cont

vue2.0 路由学习笔记

昨天温故了一下vue2.0的路由 做个笔记简单记录一下! 1.首相和vue1.0一样 要使用vuejs的路由功能需要先引入vue-router.js 2.然后修改原有a标签处代码 这里以一个ul li a 为例 <ul> <li><a href="#"></a></li> <li><a href="#"></a></li> </ul> 使用 rou

vue2.0路由-路由嵌套

vue一个重要的方面就是路由,下面是自己写的一个路由的例子: 1.引入依赖库就不必再说 2.创建组件 两种写法 第一种:间接 <template id="home"> <div> <h1>Home</h1> <p>{{msg}}</p> </div> </template> var About = Vue.extend({ template: '#about' }); 第二种:直接 var

SolrCloud 5.0 路由、Collection创建与数据迁移

SolrCloud的设计是为了提供高可用.容错,在分布式环境中进行内容索引和查询请求. SolrCloud 5.0,对自带的SolrCloud的启动脚本进行了改进,启动SolrCloud变的异常简单,执行 $ bin/solr –e cloud 根据提示输入一些参数,即可启动完成SolrCloud,部署启动完成,如下图 SolrCloud相关概念 SolrCloud中有四个关键名词:core.collection.shard.node.         core:在Solr单机环境中,core本

angular4.0 路由守卫详解

在企业应用中权限.复杂页多路由数据处理.进入与离开路由数据处理这些是非常常见的需求. 当希望用户离开一个正常编辑页时,要中断并提醒用户是否真的要离开时,如果在Angular中应该怎么做呢? 其实Angular路由守卫属性可以帮我们做更多有意义的事,而且非常简单. Angular 的 Route 路由参数中除了熟悉的 path.component 外,还包括四种是否允许路由激活与离开的属性. canActivate: 控制是否允许进入路由. canActivateChild: 等同 canActi