J'obtiens une erreur lorsque j'encapsule une route de ressources vers mon middleware personnalisé
Mon middleware final:
Route::resource('new-order', 'BackendController')->middleware('officer');
La route de la ressource utilisant le middleware:
<?php namespace App\Http\Middleware; use Closure; use Auth; class Officer { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { if (Auth::check() && Auth::user()->role == 'title_officer') { return $next($request); } // elseif (Auth::check() && Auth::user()->role == 'agent') { // return redirect('/agent'); // } // else { // return redirect('/customer'); // } } }
J'obtiens une erreur:
(Essayer d'obtenir les 'en-têtes' de propriété d'un non-objet).
Comment y remédier?
4 Réponses :
essayez d'ajouter un bloc else
qui revient lorsque votre condition if
n'est pas remplie:
public function handle($request, Closure $next) { if (Auth::check() && Auth::user()->role == 'title_officer') { return $next($request); }else{ return back(); } }
le bloc else manquant créait le problème, mais maintenant je l'ai corrigé. Merci
Dans le middleware, il est important de gérer tous les cas et de renvoyer les redirections en conséquence ou d'abandonner.
Vous retournez $ next ($ request);
lorsque vous voulez permettre au système de continuer à traiter la demande à l'avance.
Cependant, si dans le cas si ( Auth :: check () && Auth :: user () -> role == 'title_officer')
échoue, vous n'avez pas mentionné ce que le système doit faire.
Vous pouvez être abort (404)
si vous ne voulez pas afficher la page comme disponible ou peut-être abandonner (403)
pour un accès interdit.
public function handle($request, Closure $next) { if (Auth::check() && Auth::user()->role == 'title_officer') { return $next($request); } abort(403); }
Mais assurez-vous de ne pas ajouter de cas qui fera une boucle infinie. Veuillez consulter la documentation pour plus d'options.
utilisez simplement quelque chose comme ceci dans le middleware: RedirectIfAuthenticated
public function handle($request, Closure $next, $guard = null) { if (Auth::guard($guard)->check()) { // your condition return redirect('the route name'); } }
En retard mais .. Cela m'arrive lorsque la colonne dans DB était nulle.
à peu près @TravisBritz