【发布时间】:2015-07-24 14:19:57
【问题描述】:
我正在对用户进行权限检查,以确定他们是否可以查看页面。这涉及首先通过一些中间件传递请求。
我遇到的问题是在将数据返回到视图本身之前,我在中间件和控制器中复制了相同的数据库查询。
这是一个设置示例;
--routes.php
Route::get('pages/{id}', [
'as' => 'pages',
'middleware' => 'pageUser'
'uses' => 'PagesController@view'
]);
-- PageUserMiddleware.php(PageUserMiddleware 类)
public function handle($request, Closure $next)
{
//get the page
$pageId = $request->route('id');
//find the page with users
$page = Page::with('users')->where('id', $pageId)->first();
//check if the logged in user exists for the page
if(!$page->users()->wherePivot('user_id', Auth::user()->id)->exists()) {
//redirect them if they don't exist
return redirect()->route('redirectRoute');
}
return $next($request);
}
-- PagesController.php
public function view($id)
{
$page = Page::with('users')->where('id', $id)->first();
return view('pages.view', ['page' => $page]);
}
如您所见,Page::with('users')->where('id', $id)->first() 在中间件和控制器中重复出现。我需要将数据从一个传递到另一个,以免重复。
【问题讨论】:
-
我正要问同样的问题,我花了很长时间才找到这个答案。这是我的问题。出于 SEO/可查找性的原因,我会在此处添加它,希望没问题:Laravel 5.0 - 在中间件和控制器中加载模型。如何加载用户模型的实例,以便在中间件和控制器中都可以使用相同的实例(只有一个数据库查询)?因为在中间件中我想检查用户是否被授权,而在控制器中我可能想显示有关用户的信息或以某种方式操纵用户。
标签: php laravel laravel-5 laravel-middleware