Laravel实战教程笔记(九) 中间件和中间件执行流程

原创 木鱼  2018-03-19 11:01  阅读 693 次

抱歉,距离上篇Laravel文章已经过去5个月了。

上期:Laravel实战教程笔记(八) 路由

中间件

中间件是Laravel提供的一个非常方便的过滤HTTP请求的机制,我们可以给路由绑定中间件,可以在中间件里面进行身份验证、CORS、消息过滤等操作。

简单来说,中间件类似于一个个__constuct()、但是降低了耦合,个人认为使用Laravel框架、中间件是必须的。

 

执行流程

Laravel5.3之前的版本,流程:中间件->构造函数->具体方法

Laravel5.3之后,流程:构造函数->中间件->具体方法

一个方法多个中间件,执行是按照书写顺序的

Route::group(['prefix' => 'test', 'namespace' => 'Test', 'middleware' => ['first', 'second']], function () {
   Route::get('/', 'TestController@index');  // 页面
});

上述代码会先执行first中间件,然后执行second

 

大家可以自己验证一下。

 

创建中间件

php artisan make:middleware Test

此命令将会在 app/Http/Middleware 目录内设定一个名称为 Test 的类

我们判断如果session中不存在users,则认为用户没有登录并返回首页

<?php
namespace App\Http\Middleware;
use Closure;
class Test
{
    /**
     * 判断用户是否登录。
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (! $request->session()->exists('users')) {
            return redirect('home');
        }

        return $next($request);
    }
}

中间件也有前置中间件和后置中间件,前置中间件运行于请求处理之前,后置中间件会在应用程序处理请求 运行。

文档位置:前置中间件 / 后置中间件

 

为路由绑定中间件

 

如果你要指派中间件给特定路由,你得先在 app/Http/Kernel.php 给中间件设置一个好记的 键,默认情况下,这个文件内的 $routeMiddleware 属性已包含了 Laravel 目前设置的中间件,你只需要在清单列表中加上一组自定义的键即可。

// 在 App\Http\Kernel 类内...protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'test' => \App\Http\Middleware\Test::class
];

 

中间件一旦在 HTTP kernel 文件内被定义,即可在路由选项内使用 middleware 键值指定

Route::get('/', ['middleware' => ['first', 'second'], function () {
    // 路由
}]);
Route::group(['prefix' => 'test', 'namespace' => 'Test', 'middleware' => ['first', 'second']], function () {
   Route::get('/', 'TestController@index');  // 页面
});

 

到此中间件基本就完了,如果有错误、或不理解的,我们一起讨论。

本文地址:https://www.m5yu.com/laravel-middleware.html
关注我们:请关注一下我们的微信公众号:扫描二维码,公众号:木鱼博客
版权声明:本文为原创文章,版权归 木鱼 所有,欢迎分享本文,转载请保留出处!
下一篇:已经是最新一篇了

发表评论


  1. *
    * 【队长】 @回复

    迎春花一开,引得百花竞放,梅花开,杏花开,桃花开,看的人眼花,花多的你都叫不上名字,番正都是花,看起来很好看,很映人的眼,很牵动人的心,能激发人多情,能触动人去联想,给人感觉是北京成了花的海洋,花的世界,花的天下,花的花境。冬天的护城河畔,虽然没有花,但是一河青冰也装饰的护城河银装素裹,玉带环绕,更是富有生活的特写。

  2. bt110
    bt110 【农民】 @回复

    谢谢博主热心的分享,很不错,留言支持下,欢迎回访下我的网站