ホーム > Laravel > LaravelでTrying to get property 'headers' of non-objectと出た時の解決方法
Laravel

LaravelでTrying to get property 'headers' of non-objectと出た時の解決方法

いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。

⇨ Laravel 記事の目次はこちら

Laravel の Middleware でミスると、

LaravelでTrying to get property 'headers' of non-object

と、エラーが発生します。

その対処法について書いています。

結論

return $next($request);の記述がない

 /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string|null  ...$guards
     * @return mixed
     */
    // public function handle(Request $request, Closure $next, ...$guards)
    public function handle()
    {
        $guards = empty($guards) ? [null] : $guards;

        foreach ($guards as $guard) {
            if (Auth::guard($guard)->check()) {
                return redirect(RouteServiceProvider::HOME);
            }
        }

        // return $next($request);
    }

これは、middlware、'guest'の関数ですが、一番下の

return $next($request);

がないとエラーになります(次のミドルウェアに$request がいかないため)

ミドルウェアの修正してたら要注意

ミドルウェアを使って、

認証前、認証後のリダイレクトを変えたり、

if 文を追記したりしたときは、要注意です。

ミドルウェア以外の可能性もある

レスポンスヘッダーがないというエラーなので、処理の中でどこかの関数に不備があれば同じエラーが出るはずです。

今回は、実例があったので1点あげましたが、同じエラー表示でミドルウェア以外が原因ということも大いにあり得ると思います。

まとめ

以上です。

知らないと永遠にハマりかねないバグなので記事にしました。

いったん知ってしまえば、楽になると思います!

感想・苦情は TwitterDM にご連絡ください。

それでは!

人気記事

PHP7.4 + Laravel6 のプロジェクトを AWS EC2 にデプロイする

【laravel-breadcrumbs】Laravel でパンくずリストを実装する