美文网首页
laravel中间件middleware如何使用详细讲解

laravel中间件middleware如何使用详细讲解

作者: 闲睡猫 | 来源:发表于2019-05-12 11:29 被阅读0次

    什么是中间件

    可以简单地将中间件理解为请求与响应之间的中间人。用户发出一个路由请求,经过中间件的验证或过滤后,才能获取相应的响应内容。

    image

    定义中间件

    laravel提供了定义中间件的指令,如定义一个获取当前时间的中间件

    $ php artisan make:middleware GetCurrentTime
    

    自动生成了 app/Http/Middleware/GetCurrentTime.php 文件

    image

    handle方法中写具体的业务代码:

    public function handle($request, Closure $next)
    {
        dump(date('Y-m-d H:i:s', time()));
        return $next($request);
    }
    

    注册中间件

    定义好的中间件需要进行注册才能使用,注册的方式有三种:

    全局注册

    即所有路由都必须经过此中间件

    app/Http/Kernel.php 中的 $middleware 进行注册:

    protected $middleware = [
        # ...
        \App\Http\Middleware\GetCurrentTime::class,
    ];
    

    效果如下:

    image

    全局注册作用于所有路由,应用的场景比较少,毕竟开销太大

    路由注册

    只针对特定的路由起作用

    首先在 app/Http/Kernel.php$routeMiddleware 中注册自定义的路由

    protected $routeMiddleware = [
        # ...
        'get_current_time' => \App\Http\Middleware\GetCurrentTime::class,
    ];
    

    然后在 routes/web.php 中将中间件绑定到指定的路由

    Route::get('test', 'TestController@index')->name('test')->middleware('get_current_time')
    

    创建TestController:

    $ php artisan make:controller TestController
    
    image

    浏览器访问:http://local.laravel-study.com/test

    image

    这种将中间件逐一绑定到路由的方式效率太低了,一般采用路由分组的方式进行绑定,格式如下:

    Route::group(['middleware' => ['get_current_time']], function () {
        Route::get('test', 'TestController@index')->name('test');
    });
    

    控制器中注册

    去掉路由中的中间件绑定

    Route::get('test', 'TestController@index')->name('test');
    

    修改 app/Http/Controllers/TestController.php 代码:

    class TestController extends Controller
    {
        public function __construct()
        {
            // 排除某些方法
    //        return $this->middleware(['get_current_time'])->except('index');
            return $this->middleware(['get_current_time']);
        }
    
        public function index()
        {
            echo "test";
        }
    }
    

    以上方法中,路由分组注册中间件最常用

    源码库

    相关文章

      网友评论

          本文标题:laravel中间件middleware如何使用详细讲解

          本文链接:https://www.haomeiwen.com/subject/lxfcaqtx.html