zoukankan      html  css  js  c++  java
  • Laravel中间件

    先谈一谈中间件的使用场景,比如路由转到一张页面,我们需要记录用户的cookie,或者检测用户的访问权限,这些操作如果全写在控制器里是不合适的,因为随着业务的扩充,控制器里的业务逻辑会越来越臃肿,难以维护,所以,不同的操作,我们分别写在各自的中间件里。我们使用artisan命令行来创建一个中间件。

    1 php artisan make:middleware MyMiddleware

    中间件的php文件都放在了目录appHttpMiddleware下,大家应该注意到,中间件Middleware和控制器Controller文件夹都在Http文件夹下。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php
    namespace AppHttpMiddleware;
    use Closure;
    class MyMiddleware
    {
        /**
         * Handle an incoming request.
         *
         * @param  IlluminateHttpRequest  $request
         * @param  Closure  $next
         * @return mixed
         */
        public function handle($request, Closure $next)
        {
            return $next($request);
        }
    }

    这里我们只改动handle函数来举例中间件的使用

    1
    2
    3
    4
    5
    public function handle($request, Closure $next)
    {
            echo 'MyMiddleware is running!';
            return $next($request);
    }

    中间件不注册是不能使用的。注册方式有以下两种,取其一即可。

    第一种,Kernel.php的$middleware数组中注册,这种注册后,所有的HTTP请求都将可以启动这个中间件,特别适合用在身份认证类的功能上。

    1
    2
    3
    4
    protected $middleware = [
          IlluminateFoundationHttpMiddlewareCheckForMaintenanceMode::class,
          AppHttpMiddlewareMyMiddleware::class,
    ];

    第二种,Kernel.php的$routeMiddleware数组中注册,这种注册方式适用于部分指定页面才可以启动这个中间件。

    1
    2
    3
    4
    5
    6
    7
    8
    protected $routeMiddleware = [
            'auth' => AppHttpMiddlewareAuthenticate::class,
            'auth.basic' => IlluminateAuthMiddlewareAuthenticateWithBasicAuth::class,
            'guest' => AppHttpMiddlewareRedirectIfAuthenticated::class,
            'throttle' => IlluminateRoutingMiddlewareThrottleRequests::class,
             
        'mymiddleware'=>AppHttpMiddlewareMyMiddleware::class,
    ];

    请注意,注册中间件,不是等于启动中间件,注册仅仅是让你能用而已,但是具体调用还是要另外写的。

    如果你的View有对应的Controller,就直接在Controller里写。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class MyController extends Controller
    {
        public function index()
        {
            $this->middleware('MyMiddleware');
                    //你也可以继续使用其他中间件
             
            return View('welcome');
        }
    }

    如果路由里直接绑定了一个匿名函数,可以修改routes.php

    1
    2
    3
    Route::get('/index',['middleware'=>'mymiddleware',function(){
        return 'hello world';
    }]);

      

      

      

  • 相关阅读:
    QT 中如何实现一个简单的动画
    qt 中画线时如何设置笔的颜色和填充
    QT自定义窗口
    qt 中创建一个工作线程(例子)
    QT 获取系统时间
    火狐浏览器 system error code 1722 rpc服务器不可用和谷歌浏览器的插件application/x-print-ladop不支持
    ORA-10858:在要求输入数字处找到非数字字符
    eaeyui-combobox实现组合查询(即实现多个值得搜索)
    Mybatis中的模糊查询
    如何设置像我这样的博客的样式。
  • 原文地址:https://www.cnblogs.com/wuyuxin/p/7039681.html
Copyright © 2011-2022 走看看