私は、このミドルウェアを幼稚園で完成させようとしています。このミドルウェアは、サブスクリプションプランに登録されていることを確認します。ユーザーでない場合は、支払いページにリダイレクトされます。
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の呼び出し。
問題は、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);
}
_
他のルートにリダイレクトして解決しますreturn redirect()->to('route');