Variável de retorno do Laravel Middleware para o controlador

Estou realizando uma verificação de permissões em um usuário para determinar se ele pode exibir uma página ou não. Isso envolve passar a solicitação através de algum middleware primeiro.

O problema que tenho é que estou duplicando a mesma consulta de banco de dados no middleware e no controlador antes de retornar os dados para a própria exibição.

Aqui está um exemplo da instalação;

- 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]);
}

Como você pode ver, oPage::with('users')->where('id', $id)->first() é repetido no middleware e no controlador. Eu preciso passar os dados de um para o outro para não duplicar.

questionAnswers(11)

yourAnswerToTheQuestion