什么是中间件中间件顾名思义是指在请求和响应中间,进行请求数据的拦截处理,数据校验,并且进行逻辑处理后判断是否允许进入下一个中间件。中间件分为前缀中间件,后置中间件。可以用于权限认证。日志记录等
图样图片源至koa的官方图
Laravel中间件
生成中间件类首先通过Laravel自带的artisan 命令生成一个中间件php artisan make:middleware TestMiddleware
这个命令是在Laravel项目的app/Http/Middleware目录下创建TestMiddleware类。
进行我们中间件的请求校验。如果请求参数不合法我们进行重定向。
namespace App\Http\Middleware;
use Closure;
class TestMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if($request->input('token') === 'engkan'){ //判断请求token是否合法
return $next($request);
}
return redirect('/');
}
}
注册中间件在Laravel5.6版本里,有三种中间件类型。全局中间件,中间件组,路由中间件
下面我们注册路由中间件做测试,配置Laravel项目的app/Http目录下的Kernel.php类文件,在$routeMiddleware上添加我们注册我们刚刚的中间件/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'test' => Middleware\TestMiddleware::class
];
现在我们可以在路由使用我们我们刚刚注册的中间件了,进入Laravel项目的routes目录下的web.php去添加我们的中间件查看是否生效
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return view('welcome');
});
Route::get('/test', function () {
return 'test';
})->middleware('test');
查看效果现在我们开启laravel服务打开浏览器查看效果php artisan serve
打开不带token页面 http://127.0.0.1:8000/test
打开带token的页面 http://127.0.0.1:8000/test?token=engkan
发现不带token的页面被重定向了,果不其然发现和我们想的一样。现在我们大概对中间件有了一定认识,当然Laravel的中间件不止是这些。
实现一个简单的中间件
本文由 潘文伟 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Sep 14, 2018 at 02:14 pm