Laravel

LaravelのRegister(ユーザー登録)でバリデーションにひっかかったとき、指定の場所にリダイレクトさせる方法

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

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

⇨ Laravel 記事の目次はこちら

Laravel の Register(ユーザー登録)でバリデーションにひっかかったとき、指定の場所にリダイレクトさせる方法についてまとめました。

Laravel 6

前提

かなりユースケースは少ないと思います。

Laravel の Auth を使った登録の仕組みだと、バリデーションに引っ掛かると

vendor/laravel/framework/src/Illuminate/Foundation/Auth/RegistersUsers.php に書かれているように、

    public function register(Request $request)
    {
        $this->validator($request->all())->validate();
        event(new Registered($user = $this->create($request->all())));
        $this->guard()->login($user);
        return $this->registered($request, $user)
                        ?: redirect($this->redirectPath());
    }

の関数において、

->validate();

となっているため、自動リダイレクト機能が動作します。

結論

なので、この関数をオーバーライドしてあげます。

App/Http/Controllers/Auth/RegisterController.php

    public function register(Request $request)
    {
        $validation = $this->validator($request->all());
        if($validation->fails()) {
            //ここでリダイレクトを指定する
            return redirect()
                  //routeの部分をお好みの場所に変えて使えると思います
                ->route('register')
                ->withErrors($validation)
                ->withInput();
        }
        event(new Registered($user = $this->create($request->all())));
        $this->guard()->login($user);
        return $this->registered($request, $user)
                        ?: redirect($this->redirectPath());
    }

リダイレクト処理がどこで行われているのか分かればあとは関数をオーバーライド(上書き)してあげれば良いだけです。

まとめ

以上です。

誰かの参考になればと思います。

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

それでは!

人気記事

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

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