php中间件,php中间件 (middleware)

什么是中间件中间件顾名思义是指在请求和响应中间,进行请求数据的拦截处理,数据校验,并且进行逻辑处理后判断是否允许进入下一个中间件。中间件分为前缀中间件,后置中间件。可以用于权限认证。日志记录等

图样图片源至koa的官方图

php中间件,php中间件 (middleware)_第1张图片

Laravel中间件

生成中间件类首先通过Laravel自带的artisan 命令生成一个中间件php artisan make:middleware TestMiddleware

php中间件,php中间件 (middleware)_第2张图片

这个命令是在Laravel项目的app/Http/Middleware目录下创建TestMiddleware类。

进行我们中间件的请求校验。如果请求参数不合法我们进行重定向。

php中间件,php中间件 (middleware)_第3张图片

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

你可能感兴趣的:(php中间件)