【问题标题】:Laravel two middlewares same queryLaravel 两个中间件相同的查询
【发布时间】:2018-12-25 12:57:22
【问题描述】:

我有两个路由组 A 和 B。我有两个中间件来检查类似的东西。 中间件1:(if something in my database has status == 0) { return $next($request);} else { redirect to route X }

中间件2:(if something in my database has status != 0) { return $next($request);} else { redirect to route X }

我的路由 X 与 SomeController@action 类似: (if something in my database has status == 0) { redirect to a route in route group A) ELSE { redirect to a route in route group B)

我正在执行相同的查询 (something in my database has status) 3 次,但我不知道如何重写代码。如果状态 == 0,我需要不访问组路由 A,如果状态!= 0,我需要组路由 B。所以它们不能同时访问。

有什么方法可以重写代码,这样我就不会在每次请求时查询 db 3 次?

【问题讨论】:

    标签: php laravel routes middleware laravel-5.6


    【解决方案1】:

    如果 $status 不会在每个请求的基础上发生变化,那么这是使用缓存的完美用例。

    $status = Cache::remember('status', $minutes, function () {
        // retrieve $status from database.
        return $status;
    });
    

    如果 $status 仅对该请求有效,但在整个请求期间不改变,您可以在请求期间将状态存储在应用容器中:

    App::singleton('currentStatus', function(){
        // retrieve $status from database.
        return $status;
    });
    

    然后在你的中间件中使用app('currentStatus')

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-19
      • 2017-07-19
      • 2022-06-10
      • 2021-03-30
      • 2020-06-29
      • 1970-01-01
      • 2021-12-17
      • 2014-08-15
      相关资源
      最近更新 更多