我有两个路由组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)
我进行了3次相同的查询(something in my database has status
),但是我不知道如何重写代码。我需要在状态== 0时不访问组路由A,在状态!= 0时不访问组路由B。因此不能同时访问它们。
任何方式都可以重写代码,这样我就不会在每次请求时都查询数据库3次吗?
答案 0 :(得分:0)
如果$ 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')
。