Laravel Middleware de la variable de retour de contrôleur

Je suis la réalisation d'une vérification des permissions à un utilisateur de déterminer si elles peuvent afficher une page ou pas. Cela implique de passer de la demande par le biais de certains middleware premier.

Le problème que j'ai c'est que je suis en reproduisant les mêmes requête de base de données dans le middleware et le contrôleur avant de renvoyer les données à la vue elle-même.

Voici un exemple de l'installation;

-- 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é dans les deux le middleware et le contrôleur. J'ai besoin de passer les données par le biais de l'un à l'autre afin de ne pas dupliquer.

  • J'allais vous demander quelque sorte la même, m'a fallu du temps pour trouver cette réponse. Voici ma question. Je vais l'ajouter ici, pour le SEO/localisation raisons, j'espère que c'est ok: Laravel 5.0 - Charger le modèle dans le middleware ET le contrôleur. Comment puis-je charger une instance de la Utilisateurs du modèle, de sorte que la même instance (une seule requête de base de données est disponible dans le Middleware et le Contrôleur? Parce que dans le middleware je veux vérifier si l'utilisateur est Autorisé et, dans le Contrôleur, j'aimerais présenter les informations sur l'Utilisateur ou de manipuler l'Utilisateur en quelque sorte.
InformationsquelleAutor Alex | 2015-05-13