• laravel5.5中间件


    1. 中间件知识

    1. artisan 命令

    php artisan make:middleware CheckAge
    

    2. 文件内容

    <?php
    
    namespace AppHttpMiddleware;
    
    use Closure;
    
    class CheckAge
    {
        public function handle($request, Closure $next)
        {
            if ($request->age <= 200) {
                return redirect('home');
            }
            //还可以进行一些其他的判定
            
            return $next($request);
        }
    
    }
    

    3. 前置中间件和后置中间件

    前置中间件和后置中间件区别在于执行动作在$next($request)之前还是之后

    //前置中间件
        public function handle($request, Closure $next)
        {
            // 执行动作,在$next($request)之前
            $response = $next($request);
            return $response;
        }
    //后置中间件
        public function handle($request, Closure $next)
        {
            $response = $next($request);
    
            // 执行动作在$next($request)之后,return之前
    
            return $response;
        }
    
    

    4. 使用中间件

    • 全局中间件

    只需在 app/Http/Kernel.php 类中的 $middleware 属性里列出这个中间件类 。

        protected $middleware = [
            IlluminateFoundationHttpMiddlewareCheckForMaintenanceMode::class,
            IlluminateFoundationHttpMiddlewareValidatePostSize::class,
            //更多。。。
        ];
    
    • 特定路由中间件

    只需在 app/Http/Kernel.php 类中的 $routeMiddleware 属性里添加,然后在路由中分配给路由

    protected $routeMiddleware = [
        'auth' => IlluminateAuthMiddlewareAuthenticate::class,
        'auth.basic' => IlluminateAuthMiddlewareAuthenticateWithBasicAuth::class,
        //更多。。。
    ];
    
    //给路由分配中间件
    Route::get('admin/profile', function () {
        //
    })->middleware('auth');
    //分配多个中间件:
    Route::get('/', function () {
        //
    })->middleware('first', 'second');
    
    • 中间件组

    只需在 app/Http/Kernel.php 类中的 $middlewareGroups 属性里添加,然后在路由中分配给路由

    protected $middlewareGroups = [
        'web' => [
            AppHttpMiddlewareEncryptCookies::class,
            IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class,
            IlluminateSessionMiddlewareStartSession::class,
            IlluminateViewMiddlewareShareErrorsFromSession::class,
            AppHttpMiddlewareVerifyCsrfToken::class,
            IlluminateRoutingMiddlewareSubstituteBindings::class,
        ],
    
        'api' => [
            'throttle:60,1',
            'auth:api',
        ],
    ];
    
    //一次为路由分配多个中间件
    Route::get('/', function () {
        //
    })->middleware('web');
    
    Route::group(['middleware' => ['web']], function () {
        //
    });
    

    2. 控制器中间件

    中间件 可以在路由文件中被分配给控制器路由:

    Route::get('profile', 'UserController@show')->middleware('auth');
    

    但是,在控制器的构造方法中指定中间件会更方便。使用控制器构造函数中的 middleware 方法,你可以很容易地将中间件分配给控制器的行为。你甚至可以约束中间件只对控制器类中的某些特定方法生效:

    class UserController extends Controller
    {
        /**
         * 实例化一个新的控制器实例。
         *
         * @return void
         */
        public function __construct()
        {
            $this->middleware('auth');
    
            $this->middleware('log')->only('index');
    
            $this->middleware('subscribed')->except('store');
        }
    }
    

    还能使用闭包来为控制器注册中间件。闭包的方便之处在于,你无需特地创建一个中间件类来为某一个特殊的控制器注册中间件:

    $this->middleware(function ($request, $next) {
        // ...
    
        return $next($request);
    });
    
  • 相关阅读:
    Supermap全面接触
    期末小结(二).应用技术
    发展需要大师,繁荣更需批评——GIS现状堪忧
    期末小结(三).我是玻璃缸里的鱼
    地信空间数据库实习讲稿(Oracle spatial)
    .net会取代JavaScript
    空间聚类(等回来之后完成)
    .Net Windows服务安装完成后自动启动
    规划网站,本教程将以图示为例构建网站;
    漫谈CSS和页面布局
  • 原文地址:https://www.cnblogs.com/redirect/p/8435818.html
Copyright © 2020-2023  润新知