【发布时间】:2015-11-05 12:50:14
【问题描述】:
我有一个执行查询的中间件,我想将结果传递回我的控制器。可能吗?我正在使用 Laravel 5。
public function handle($request, Closure $next)
{
if ($this->auth->guest()) {
if ($request->ajax()) {
return view('errors.401');
} else {
return redirect()->guest('auth/login');
}
}
$cur_route = Request::segment(1);
$result = DB::table('t_user_acl_masters')->join('t_function_details', 't_function_details.functiondtl_id', '=' ,'t_user_acl_masters.functiondtl_id')
->where('t_function_details.routename', '=', $cur_route)
->where('t_user_acl_masters.user_id', '=', $request->user()->user_id)
->select('t_user_acl_masters.viewaccess','t_user_acl_masters.addaccess','t_user_acl_masters.editaccess','t_user_acl_masters.deleteaccess')
->first();
if(!empty($result)) {
if ($result->viewaccess != 'y') {
return view('errors.401');
}
}
return $next($request, $result);
}
控制器:
public function __construct(Request $request)
{
parent::__construct();
$this->middleware('auth');
$this->user = Auth::user();
$this->acl = $request->attributes->get('acl');
}
public function index(Request $request){
dd($this->acl);
}
我已将它注入到请求的属性中,但我无法从我的函数中获取它。如果我 dd($request->attributes->get('acl')) 在我的 index() 函数中,数据可用。
【问题讨论】:
-
如何将其传回并在构造函数中显示?因为现在如果我将它设置为flash session,它只能在一个函数上获取,而不能在其他函数上获取。
-
你到底想做什么?也许这不是应该在中间件中完成的事情。
-
在中间件中查询出用户的访问控制。我想将它传递回我的 __construct 以便我不需要再次查询它。我的控制器中的大多数功能都需要这些数据。每个页面都需要此查询,并且查询根据查询的路线而有所不同。
-
但如果我没看错,您只能选择
viewaccess列。基于此,您决定是否抛出401。为什么需要保存它?
标签: php laravel laravel-5 laravel-5.1