• Laravel5.1 Middleware中间件(初级)


    中间件?什么鬼? 大家第一次接触这个词都会有这么个疑问,但它其实没那么神秘。

    一句话就可以解释它:过滤HTTP请求专用机制。

    为什么要使用中间件?

    过滤HTTP请求是可以写在别的地方,比如说控制器中 路由中,BUT 抽象出来就有它的理由,比如说Laravel自带的Auth中间件 它要求必须是登录进来的用户才有权访问 如果没有登录就跳转到登录页面,这样的逻辑在很多场景都会用到 这很明显了吧 你不可能在每个控制器或每一个路由都单独实现以便,直接抽出来多方便。


    1 使用中间件

    1.1 创建中间件

    咱创建中间件是使用artisan控制台的:

    php artisan make:middleware TestMiddleware

    创建好后位于:app/Http/Middleware

    1.2 解读中间件

    首先我们来看看新创建的中间件是什么模样儿:

    class TestMiddleware
    {
        /**
         * Handle an incoming request.
         *
         * @param  IlluminateHttpRequest  $request
         * @param  Closure  $next
         * @return mixed
         */
        public function handle($request, Closure $next)
        {
            return $next($request);
        }
    }

    解读:middleware中只有 “handle”函数 这个函数呢接受两个参数

    它的流程是接受request参数 取出一些东西做验证 如果逻辑通过 执行next闭包。

    如果你还是不太懂的话 没关系 咱上实例

    1.3 编写中间件

        public function handle($request, Closure $next)
        {
            // 如果传入的id参数等于0 就跳转到首页。
            if ($request->input('id') == 0){
                return redirect('/');
            }
            // id参数不等于0 则为通过 进行默认的下一步操作。
            return $next($request);
        }

    完事儿后我们需要在 app/Http/Kernel.php 中进行注册:

        /**
         * The application's global HTTP middleware stack.
         *
         * @var array
         */
        protected $middleware = [
            IlluminateFoundationHttpMiddlewareCheckForMaintenanceMode::class,
            AppHttpMiddlewareEncryptCookies::class,
            IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class,
            IlluminateSessionMiddlewareStartSession::class,
            IlluminateViewMiddlewareShareErrorsFromSession::class,
            AppHttpMiddlewareVerifyCsrfToken::class,
        ];
    
        /**
         * The application's route middleware.
         *
         * @var array
         */
        protected $routeMiddleware = [
            'auth' => AppHttpMiddlewareAuthenticate::class,
            'auth.basic' => IlluminateAuthMiddlewareAuthenticateWithBasicAuth::class,
            'guest' => AppHttpMiddlewareRedirectIfAuthenticated::class,
            // 把我们创建的middleware注册到这里
            'test' => AppHttpMiddlewareTestMiddleware::class,
        ];

    注意:我们可以瞧见啊 Kernel 中有两个数组 如果你希望在全局中使用 就注册在middleware数组中,如果你想要局部使用middleware 那么就在routeMiddleware数组中注册。

    1.4 使用中间件

    好了,注册完之后我们来用用吧:

    Route::get('/test-middleware',['middleware'=>'test',function(){
        return 'HI';
    }]);

    当我们输入:http://localhost:8000/test-middleware?id=1 时会在页面上输出HI 当输入 http://localhost:8000/test-middleware?id=0 时会返回首页。

  • 相关阅读:
    QT *.pri 语法学习
    qt 的相对路径说法
    openwrt 时间更新
    openwrt network 初始化
    在线配置热加载配置 go-kratos.dev 监听key 通过atomic.Value支持自动热加载
    Monkey patching
    UDP flood UDP Port Denial-of-Service Attack
    一例 Go 编译器代码优化 bug 定位和修复解析
    t
    golang 网络编程之如何正确关闭tcp连接以及管理它的生命周期 socket
  • 原文地址:https://www.cnblogs.com/sun-kang/p/7398477.html
Copyright © 2020-2023  润新知