Laravel 5.4 官方文档摘记:中间件
来源:互联网 发布:软件系统推广验收 编辑:程序博客网 时间:2024/06/08 13:29
中间件
作用
就是在访问实际的控制器与方法之前,首先访问中间件,我感觉我曾经想到的一个比喻是很贴切的,中间件就是女方的父母,在你准备结婚(访问实际的控制器和方法)之前,如果女方有父母,那么你一定要先见见她父母,这就是中间件。
Laravel
内置了几个中间件,下面会介绍,但是首先来看如何自定义一个中间件。
命令行创建
Laravel
有一点很爽的就是可以使用命令行来直接生成基础代码的文件,详细的我会专门列一个表格出来的,现在先来看创建中间件的文件。
在项目的根目录下,也就是artisan
的那个目录下,可以运行下面的命令新建一个中间件文件:
php artisan make:middleware MiddlewareName
接着就会在\app\Http\Middleware
下新建了一个MiddlewareName.php
的文件,这里直接贴基础代码吧,如果不想使用命令行,那么就手动新建一个文件,把下面的代码复制进去就行了:
<?phpnamespace App\Http\Middleware;use Closure;class MiddlewareName{ /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { //这里存放中间件验证之前执行的代码 $response=$next($request); //这里存放经过中间件验证之后执行的代码 return $response; }}
注册中间件
上面我们只是把中间件的文件创建好了,之后如果想要调用该中间件,则需要对该中间件进行注册,注册的方法很简单,需要设置\app\Http\Kernel.php
文件。具体各个部分的作用直接看下面代码中的注释:
<?phpnamespace App\Http;use Illuminate\Foundation\Http\Kernel as HttpKernel;class Kernel extends HttpKernel{ /** 这个是全局的中间件,每个路由都会经过其中中间件的验证 */ protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \App\Http\Middleware\TrimStrings::class, \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, ]; /** 这里是一组,就是按照你的意愿,把多个中间件组合在一起,这样调用起来比较方便 */ protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, // \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, ], 'api' => [ 'throttle:60,1', 'bindings', ], // 'checkage'=>[\App\Http\Middleware\CheckAge::class] ]; /** 上面是一组,那么这里就是单个的中间件了,如果你想你的中间件单独生效,那就在这里进行注册 */ protected $routeMiddleware = [ 'auth' => \Illuminate\Auth\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, ];}
调用中间件
路由中直接调用
Route::get('users/1',function(){})->middleware('auth');
上面直接调用了一个中间件auth
,至于这个中间件的具体作用暂且不谈,现在只需要确定是这样在路由中调用中间件的即可。
可以调用多个中间件:
Route::get('users/1',function(){})->middleware('auth','second','third');
会把请求依次按照上面的顺序进行检验。这里也可以直接传入中间件组的名称,调用中间件组和单一中间件的方法是一样的。
参数设置
首先,我们使用命令行创建出来的基础中间件,默认传入的参数是两个,$request
和Closure $next
,但是实际上自定义的类并没有继承和扩展任何类,所以完全是我们自定义了一个类,并在该类中设置了统一的方法:handle
,所以我们完全可以在其中加入新的参数,来满足我们自己的需要:
public function handle($request,Closure $next,$newParam){ //如果确定按照请求征程执行,则运行下面的代码 return $next($request); //否则你可以直接把页面重定向 redirect()->route('routeName');}
回到路由调用中间件中来,当你设置额外的参数时,可以在路由调用中间件时传入:
Route::put('post/{id}',function($id){})->middleware('role:paramFirst,paramSecond');
在中间件名字的后面加上:
表示接下来的是参数,多个参数之间使用,
进行分割。
控制器调用中间件
可以看我这篇文章Laravel 验证
- Laravel 5.4 官方文档摘记:中间件
- Laravel 5.4 官方文档摘记:路由
- Laravel 5.4 官方文档摘记:CSRF保护
- Laravel 5.4 官方文档摘记:控制器
- Laravel 5.4 官方文档摘记:请求实例
- Laravel 5.4 官方文档摘记:响应
- Laravel 5.4 官方文档摘记:View类
- Laravel 5.4 官方文档摘记:验证
- Laravel 5.4 官方文档摘记:视图
- Laravel 5.4 官方文档摘记:Eloquent ORM
- Laravel 5.4 官方文档摘记:Laravel操作数据库
- Vue.js官方文档摘记
- Vue.js 官方文档摘记:Vue 实例
- Vue.js 官方文档摘记:模板语法
- Vue.js 官方文档摘记 计算属性
- React.js 官方文档摘记:表单
- Laravel 5.4 官网资料摘记:Session
- laravel 中间件
- Spring Cloud 构建微服务-高可用注册中心
- 设计模式学习
- 协程(Coroutine)并不是真正的多线程
- Hue中Hive editor中文报错
- response.setHeader方法
- Laravel 5.4 官方文档摘记:中间件
- OpenCV嵌入式图像处理(三)使用Jetpack安装OpenCV4Tegra
- Python MySQL 1054 "Unknown column '\xe7\x88\xb1\xe6\x83\x85' in 'where clause'"错误分析
- 自己写的一个recycleview下拉加载
- php删除二维数组中的重复值
- Smallest Common Multiple
- Java的特殊类——数组对象的类
- Java学习笔记——数组
- Ubuntu常用命令大全