J'effectue une vérification des autorisations sur un utilisateur pour déterminer s'il peut afficher une page ou non. Cela implique d'abord de passer la requête via un middleware.
Le problème que j'ai est que je duplique la même requête de base de données dans le middleware et dans le contrôleur avant de renvoyer les données à la vue elle-même.
Voici un exemple de la configuration;
- routes.php
Route::get('pages/{id}', [
'as' => 'pages',
'middleware' => 'pageUser'
'uses' => 'PagesController@view'
]);
- PageUserMiddleware.php (classe 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]);
}
Comme vous pouvez le voir, le Page::with('users')->where('id', $id)->first()
est répété à la fois dans le middleware et le contrôleur. J'ai besoin de transmettre les données de l'une à l'autre pour ne pas les dupliquer.