Ich führe eine Berechtigungsprüfung für einen Benutzer durch, um festzustellen, ob er eine Seite anzeigen kann oder nicht. Dies beinhaltet, dass die Anforderung zuerst durch eine Middleware geleitet wird.Laravel Middleware Rückgabevariable zum Controller
Das Problem, das ich habe, ist, dass ich die gleiche Datenbankabfrage in der Middleware und im Controller dupliziere, bevor ich die Daten zur Ansicht selbst zurückgebe.
Hier ist ein Beispiel für das Setup;
- routes.php
Route::get('pages/{id}', [
'as' => 'pages',
'middleware' => 'pageUser'
'uses' => '[email protected]'
]);
- 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, die sehen können Page::with('users')->where('id', $id)->first()
wird sowohl in der Middleware als auch im Controller wiederholt. Ich muss die Daten von einem zum anderen weitergeben, um nicht zu duplizieren.
Ich wollte etwas ähnliches fragen, brauchte lange, um diese Antwort zu finden. Hier ist meine Frage. Ich werde es hier für SEO/Auffindbarkeit Gründe hinzufügen, hoffe, dass das in Ordnung ist: Laravel 5.0 - Laden Sie das Modell in Middleware UND Controller. Wie lade ich eine Instanz des Benutzermodells, sodass dieselbe Instanz (nur eine Datenbankabfrage) sowohl in der Middleware als auch im Controller verfügbar ist? Weil ich in der Middleware überprüfen möchte, ob der Benutzer autorisiert ist und in dem Controller möchte ich Informationen über den Benutzer präsentieren oder den Benutzer irgendwie manipulieren. – alieninlondon