Ich führe eine Berechtigungsprüfung für einen Benutzer durch, um festzustellen, ob er eine Seite anzeigen kann oder nicht. Dazu muss die Anforderung zuerst über eine Middleware weitergeleitet werden.
Das Problem, das ich habe, ist, dass ich dieselbe Datenbankabfrage in der Middleware und im Controller dupliziere, bevor ich die Daten an die Ansicht selbst zurückgebe.
Hier ist ein Beispiel für das Setup.
- route.php
Route::get('pages/{id}', [
'as' => 'pages',
'middleware' => 'pageUser'
'uses' => 'PagesController@view'
]);
- PageUserMiddleware.php (Klasse 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]);
}
Wie Sie sehen können, Page::with('users')->where('id', $id)->first()
wird dies sowohl in der Middleware als auch im Controller wiederholt. Ich muss die Daten von einem zum anderen weitergeben, um sie nicht zu duplizieren.