zoukankan      html  css  js  c++  java
  • laravel5.8笔记四:中间件

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

    命令

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

    注册中间件appHttpKernel.php

    routeMiddleware注册

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

    middlewareGroups注册

    protected $middlewareGroups = [
            'web' => [
                AppHttpMiddlewareEncryptCookies::class,
                IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class,
                IlluminateSessionMiddlewareStartSession::class,
                // IlluminateSessionMiddlewareAuthenticateSession::class,
                IlluminateViewMiddlewareShareErrorsFromSession::class,
                AppHttpMiddlewareVerifyCsrfToken::class,
                IlluminateRoutingMiddlewareSubstituteBindings::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');

    场景一:加载常量

     MiddlewareConstant.php

    <?php
    
    namespace AppHttpMiddleware;
    
    use Closure;
    
    class Check
    {
        /**
         * Handle an incoming request.
         *
         * @param  IlluminateHttpRequest  $request
         * @param  Closure  $next
         * @return mixed
         */
        public function handle($request, Closure $next)
        {
            define('VERSION','5.8');
            return $next($request);
        }
    }

    Kernel.php注册常量

    protected $routeMiddleware = [
            'auth' => AppHttpMiddlewareAuthenticate::class,
            'auth.basic' => IlluminateAuthMiddlewareAuthenticateWithBasicAuth::class,
            'bindings' => IlluminateRoutingMiddlewareSubstituteBindings::class,
            'cache.headers' => IlluminateHttpMiddlewareSetCacheHeaders::class,
            'can' => IlluminateAuthMiddlewareAuthorize::class,
            'guest' => AppHttpMiddlewareRedirectIfAuthenticated::class,
            'signed' => IlluminateRoutingMiddlewareValidateSignature::class,
            'throttle' => IlluminateRoutingMiddlewareThrottleRequests::class,
            'verified' => IlluminateAuthMiddlewareEnsureEmailIsVerified::class,
            'check'=>MiddlewareCheck::class  // 注册常量
        ];

    路由调用:

    public function index(){
            echo VERSION;
        }

    页面输出:123456

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

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

  • 相关阅读:
    Mysql一些复杂的语句
    Tomcat部署记事
    [转]Java中的事务
    Junit单元测试笔记
    Mysql之执行计划
    当产品部署出现问题时
    CSS之绝对定位那些事
    CSS之浮动那些事
    Tomcat一些小事
    NEC的学习笔记
  • 原文地址:https://www.cnblogs.com/wesky/p/10443820.html
Copyright © 2011-2022 走看看