[李景山php]每天laravel[025]-laravel 基础知识 --- 中间件

来源:互联网 发布:淘宝众筹 淘宝怎么不管 编辑:程序博客网 时间:2024/05/01 12:29

中间件:感觉就是一个类似于 守卫/保镖 的方式,随时监控正常服务之外的处理。

我们可以把很多通用的需要做成中间件:

比如: 登录权限检测、日志记录、头信息修改 等等。。。

第一个: 创建中间件 控制器类

     php artisan make:middleware 名字+Middleware 

这个命令会在 app/Http/Middleware 文件夹中产生一个新的 名字+Middleware 的类。

这里的关键函数是:

public function handle($request, Closure $next){          // 进行逻辑处理    return $next($request);}

在当前【进行逻辑处理】的位置后,加上自己需要的逻辑,即可!

这里有两个特殊的说明:
就是 前置 / 后置 中间件。定义方案两个特殊名字的中间件:
BeforeMiddleware 跟我们的 AfterMiddleware
这样就是特殊的 中间件。

第二: 注册中间件
2.1 全局中间件
把想要注册的全局中间件,放置到
app/Http/Kernel.php 类的 $middleware 属性列表中

例如:默认的。

protected $middleware = [    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,    \App\Http\Middleware\EncryptCookies::class,    \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,    \Illuminate\Session\Middleware\StartSession::class,    \Illuminate\View\Middleware\ShareErrorsFromSession::class,    \App\Http\Middleware\VerifyCsrfToken::class,];
 2.2 局部中间件【指派中间件给路由】      2.2.1  首先需要把中间件 加入到 路由中间件里面,就是 app\Http\Kernel.php 里面的 $routeMiddleware ,这样 再路由中添加中间件的时候,才能使用。 例如:
protected $routeMiddleware = [    'auth' => \App\Http\Middleware\Authenticate::class,    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,];
 2.2.2 在路由中标明 使用的中间件。

方式1 :

Route::get('admin/profile', ['middleware' => 'auth', function () {    //}]);

方式2:

Route::get('/', function () {    //}])->middleware(['first', 'second']);

第三:设置中间件参数

中间件也是可以接收参数的,这个还是很牛叉的。
用法:就是在 默认的 Closure next,role

    public function handle($request, Closure $next, $role)    {        if (! $request->user()->hasRole($role)) {            // Redirect...        }        return $next($request);    }
 中间件参数中,使用 参数的话,可以用 : 隔空指定。
Route::put('post/{id}', ['middleware' => 'role:editor', function ($id) {    //}]);

第四:可以终止中间件

 用途:例如 session 中间件,需要发送用户之后保存 session 数据。 需要的函数是:
    public function terminate($request, $response)    {        // Store the session data...    }

terminate 方法会收到 request 和 响应 response 。
定义了可以终止的中间件,需要添加这个 HTTP kernel 的全局中间件列表中去。

singleton 来注册中间件。

0 0
原创粉丝点击