確認に使ったLaravelのバージョンは5.8です。

Laravelのフォームリクエストを使うと、記述したルールでのバリデーションを使ってバリデーションを行い、エラーがあった場合はエラー内容を持って前の画面に戻る、というのを行ってくれます。
コントローラー内に処理を書かなくて良くなり、コントローラーが見やすくなるので、APIの実装にも使いたいけどエラー内容をjsonで返すのどうやるんだろ?ていうときの書き方です。

protected function failedValidation(Validator $validator)
{
    if (request()->expectsJson()) {
        $response['errors']  = $validator->errors()->toArray();

        throw new HttpResponseException(
            response()->json( $response, 422 )
        );
    }
}

フォームリクエストクラス内に上記メソッドを追加します。
最初のif文でAjaxリクエストかどうか判定しています。Ajaxリクエストじゃない場合は何もせず通常通りとなりますので、Ajax、htmlのformどちらからのリクエストにも対応しています。

参考
https://qiita.com/yamatox/items/94e123849d924329a167