web-dev-qa-db-ja.com

nullのメンバー関数setCookie()の呼び出し

私は、このミドルウェアを幼稚園で完成させようとしています。このミドルウェアは、サブスクリプションプランに登録されていることを確認します。ユーザーでない場合は、支払いページにリダイレクトされます。

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

解決策を見つけるのにあまり運がないので、このエラーが発生します。メンバー関数setCookie()へのnullの呼び出し。

8
John Freedom

問題は、trueを返す場所です。ミドルウェアは、ブールではなく、応答スタイルのオブジェクトを返す必要があります。

これが「適切な」パスであり、アプリケーションロジックを続行したいので、_return true;_を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.');
    }
}
_

無関係な推奨事項では、条件ロジックを少しクリーンアップして、コードを読みやすく/フォローしやすくすることができます。

_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

他のルートにリダイレクトして解決しますreturn redirect()->to('route');

0
asghar