web-dev-qa-db-fra.com

Appel à une fonction membre setCookie () sur null

J'essaie de terminer ce middleware en larves qui vérifie pour s'assurer qu'il est abonné à un plan d'abonnement. Si l'utilisateur ne l'est pas, il redirige vers la page de paiement.

public function handle($request, Closure $next)
{
    if(Auth::check()){
        if (Auth::user()->subscribed('main')) {
            return true;
        }else{
            return view('payments.payment')->with('user',Auth::user());
        }
    }else{
        abort(403, 'Unauthorized action.');
    }
    return $next($request);
}

Je reçois cette erreur avec peu de chance de trouver une solution Appel à une fonction membre setCookie () sur null.

8
John Freedom

Le problème est où vous renvoyez true. Un middleware doit renvoyer un objet de style réponse, pas un booléen.

Puisque c'est votre "bon" chemin et que vous voulez continuer avec votre logique d'application, vous devez remplacer return true; Par return $next($request);

public function handle($request, Closure $next)
{
    if(Auth::check()){
        if (Auth::user()->subscribed('main')) {
            return $next($request);
        }else{
            return view('payments.payment')->with('user',Auth::user());
        }
    }else{
        abort(403, 'Unauthorized action.');
    }
}

Sur une recommandation indépendante, vous pouvez nettoyer un peu votre logique conditionnelle pour rendre votre code plus facile à lire/suivre:

public function handle($request, Closure $next)
{
    // If the user is not logged in, respond with a 403 error.
    if ( ! Auth::check()) {
        abort(403, 'Unauthorized action.');
    }

    // If the user is not subscribed, show a different payments page.
    if ( ! Auth::user()->subscribed('main')) {
        return view('payments.payment')->with('user',Auth::user());
    }

    // The user is subscribed; continue with the request.
    return $next($request);
}
8
Aken Roberts

je résout en redirigeant vers un autre itinéraire return redirect()->to('route');

0
asghar