Tôi đang thực hiện kiểm tra quyền đối với người dùng để xác định xem họ có thể xem một trang hay không. Điều này liên quan đến việc chuyển yêu cầu qua một số phần mềm trung gian trước.
Vấn đề tôi gặp phải là tôi đang sao chép cùng một truy vấn cơ sở dữ liệu trong phần mềm trung gian và trong bộ điều khiển trước khi trả lại dữ liệu về chính chế độ xem.
Đây là một ví dụ về thiết lập;
- route.php
Route::get('pages/{id}', [
'as' => 'pages',
'middleware' => 'pageUser'
'uses' => 'PagesController@view'
]);
- PageUserMiddleware.php (lớp 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]);
}
Như bạn có thể thấy, điều Page::with('users')->where('id', $id)->first()
này được lặp lại trong cả phần mềm trung gian và bộ điều khiển. Tôi cần chuyển dữ liệu từ cái này sang cái kia để không bị trùng lặp.