【6】 未入力のまま投稿できないように エラー表示させよう

■ バリデーション を設定する

 データを作成 / 更新する箇所 にバリデーションを追加する。

app/Http/Controllers/PostController.php
の store アクションと update アクションに追加

    public function store(Request $request)
    {
         $request->validate([
             'title' => 'required',
             'content' => 'required',
         ]);
        
        $post = new Post();
        $post->title = $request->input('title');
        $post->content = $request->input('content');
        $post->save();

        return redirect()->route('posts.show', ['id' => $post->id])->with('message', 'Post was successfully created.');
    }

        public function update(Request $request, Post $post)
    {

         $request->validate([
             'title' => 'required',
             'content' => 'required',
         ]);
        
        $post->title = $request->input('title');
        $post->content = $request->input('content');
        $post->save();

        return redirect()->route('posts.show', ['id' => $post->id])->with('message', 'Post was successfully updated.');
    }

 ↓↓↓ 下記を追加 ↓↓↓

         $request->validate([
             'title' => 'required',
             'content' => 'required',
         ]);

バリデーションチェック に失敗した際の
エラーメッセージを表示できるようにしよう。

resources/views/posts/create.blade.php
を変更。

<h1>New Post</h1>

@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

resources/views/posts/edit.blade.php
にもエラーメッセージを表示させる。

<h1>Editing Post</h1>

@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

■ バリデーションエラー時のデータを保持しよう。

resources/views/posts/create.blade.php
の input と textarea を変更

<form method="POST" action="/posts">
    {{ csrf_field() }}
    <div class="form-group">
        <label for="exampleInputEmail1">Title</label>
         <input type="text" class="form-control" aria-describedby="emailHelp" name="title" value="{{old('title')}}">
    </div>
    <div class="form-group">
        <label for="exampleInputPassword1">Content</label>
         <textarea class="form-control" name="content">{{old('content')}}</textarea>
    </div>
    <button type="submit" class="btn btn-outline-primary">Submit</button>
</form>

 変更部分

<input type="text" class="form-control" aria-describedby="emailHelp" name="title" value="{{old('title')}}">
と
<textarea class="form-control" name="content">{{old('content')}}</textarea>

resources/views/posts/edit.blade.php
を変更

<form method="POST" action="/posts/{{ $post->id }}">
    {{ csrf_field() }}
    <input type="hidden" name="_method" value="PUT">
    <div class="form-group">
        <label for="exampleInputEmail1">Title</label>
         <input type="text" class="form-control" aria-describedby="emailHelp" name="title" value="{{ old('title') == '' ? $post->title : old('title') }}">
    </div>
    <div class="form-group">
        <label for="exampleInputPassword1">Content</label>
         <textarea class="form-control" name="content">{{ old('content') == '' ? $post->content : old('content') }}</textarea>
    </div>
    <button type="submit" class="btn btn-outline-primary">Submit</button>
</form>

 変更部分

<input type="text" class="form-control" aria-describedby="emailHelp" name="title" value="{{ old('title') == '' ? $post->title : old('title') }}">
と
<textarea class="form-control" name="content">{{ old('content') == '' ? $post->content : old('content') }}</textarea>

■ 実際にエラーが表示されるか、確認!!

php artisan serve --port=8080

 を実行。( ローカルサーバーを起動 )

localhost:8000/posts/create
にアクセス。

空欄のまま、[ Submit ] をクリック。
エラーが表示されれば、バリデーション の実装は完了☆

■ GitHub(ギットハブ) で 変更内容を保存

git add .
git commit -m “set validation”

おつかれさま でした。

次は 。。。

【7】 エラー文(バリデーション) を日本語にしよう

Follow me!