laravel5.8笔记四:中间件

时间:2023-03-08 21:51:32

应用场景:检测登陆,控制器加载数据,传递常量

命令

//中间件创建命令
php artisan make:middleware Check
注意:
1.需要注册中间件
2.中间件命名不能重复
middleware/Check.php代码
<?php
namespace App\Http\Middleware;
use Closure;
class Check
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
echo 'middleware-check';
return $next($request);
}
}

注册中间件app\Http\Kernel.php

routeMiddleware注册

protected $routeMiddleware = [
/*
* 注册中间件
* Author:MR.zhou
* */
'check' =>Middleware\Check::class,
'goods' =>Middleware\Goods::class, ];

middlewareGroups注册

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',
],
// 正常
'dds' =>[
'goods',
'check'
],
/*
* 错误示范
* 命名重复: check与routeMiddleware下的check命名重复,路由调用的时候会出错。
* */
'check' =>[
'goods',
'check'
]

路由调用

// 中间件群组 (b.验证登陆)
Route::group(['middleware' => ['check']], function () {
Route::get('/show','IndexController@show');
});
// 可以调用goods、check两个中间件
Route::group(['middleware' => ['dds']], function () {
  Route::get('/show','IndexController@show');
});
Route::get('admin/profile', function () {
//
})->middleware('auth'); Route::get('/', function () {
//
})->middleware('first', 'second');

场景一:加载常量

Middleware\Constant.php

<?php

namespace App\Http\Middleware;

use Closure;

class Check
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
define('VERSION','5.8');
return $next($request);
}
}

Kernel.php注册常量

protected $routeMiddleware = [
'auth' => \App\Http\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,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'check'=>Middleware\Check::class // 注册常量
];

路由调用:

public function index(){
echo VERSION;
}

页面输出:123456

场景二:检测登陆;方法跟上面基本一样

需要掌握的技巧:基本路由加载中间件,加载多个中间件,群组中间件