ホーム
Sponserd by↑転職したい人向け、ベンチャー企業の採用動画があります

Laravelのバリデーションでerrorsが表示されないときの解決方法

⇨ Laravel 記事の目次はこちら

前回、Laravel でバリデーション機能の記事を書きましたが、そのときに errors が view に表示されませんでした。

その時の解決策について書いていきます。

Laravel のオススメの本 ⇨「動かして学ぶ!Laravel 開発入門」

目次

  1. 環境
  2. 解決方法
  3. サンプルコード

環境

MacOS

Laravel6

解決方法

errors 用の Middleware を通していない可能性があります。

App/Http/Kernel.php

ここに、使う Middleware を指定するのですが、

\Illuminate\View\Middleware\ShareErrorsFromSession::class,

このクラスが入っていないと errors は表示されません。

初期状態の「web」と言う名前の MiddlewareGroup にはこのクラスが付与されていることが分かります。

このクラスが何らかの事情で(MiddlewareGroup を自作したとか)付けていないと errors が表示されません。

サンプルコード

⇨ 前回のバリデーションの記事(フォームリクエストによるバリデーション)

前回の記事のコードは動くコードなのでこれを題材にします。

PostRequest.php

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class PostRequest extends FormRequest
{
    public function authorize()
    {
        //ユーザー認証が必要な時はtrue
        return true;
    }

    public function rules()
    {
        return [
            'name' => 'required',
            'title'  => 'required',
            'content' => 'required'
        ];
    }
}

PostController.php

  use App\Http\Requests\PostRequest;
    ~~~

    public function store(PostRequest $request)
    {
        $post = new Post;
        $post->name = $request->name;
        $post->title = $request->title;
        $post->content = $request->content;
        $post->save();
        return redirect()->route('post.create');
    }

post.blade.php

  <form action="{{ route('post.store') }}" method="POST">
    @csrf
        <div>
            名前:
            <input name="name" value="{{ old('name') }}" placeholder="名前の入力欄"/>
        </div>
        <div>
            タイトル:
            <input name="title" placeholder="タイトルの入力欄"/>
        </div>
        <div>
            <textarea name="content" placeholder="内容の入力"></textarea>
        </div>
        @if ($errors->any())
            <div class="alert alert-danger">
                <ul>
                    @foreach ($errors->all() as $error)
                        <li>{{ $error }}</li>
                    @endforeach
                </ul>
            </div>
        @endif
        <button>送信</button>
    </form>

通常であれば、このコードで views に errors が返るはずです。

詳しくは前回の記事に書いてあります。

⇨【初心者向け】Laravel で一番簡単なバリデーションをする

⇨【初心者向け】Laravel のフォームリクエストでバリデーションする

まとめ

いかがだったでしょうか?

今回は、Laravel のバリデーションで正しく書いてるはずなのに、なぜか errors が表示されない時の対処法について書いてみました。

フレームワークは便利な分、初期設定で色々やってくれているので一度線路から降りると修正するのが大変ですね!

記事の内容についての苦情やミスの指摘は、Twitter の DM にお願いします。

最後に初心者におすすめの本の紹介です。

良く読まれている記事「Laravel6 Auth のメールアドレスの認証を実装してみる(VerifyEmail)」

Laravel 勉強中の人はこの本がオススメです。難しいことは後で学べる。とにかく動かして学ぶを目指す本です。