Laravel

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

いつもご利用ありがとうございます。このブログは、広告費によって運営されています。

オススメ本
Web技術を勉強するなら、かなりオススメの雑誌です。毎月新しい発見があります。ついに最終号・・・、みなさん買いましょう!!
読んで損することはない名著。命名で悩むことが多い人はこの本がオススメです。

⇨ Laravel 記事の目次はこちら

Laravel の Middleware でミスると、

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

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

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

結論

return next(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 でパンくずリストを実装する