初めてのLaravel 5.6 : (17) Validation(入力チェック)

前回は、Form を作成して Articles テーブルにデータを追加しましたが、入力データのチェックを行っていませんでした。今回はこの入力データのチェックを実装してみます。


Controller

Form で入力されたデータを保存している、store メソッドを修正します。

<?php
// app/Http/Controllers/ArticlesController.php

namespace AppHttpControllers;

use App\Article;
use App\Http\Controllers\Controller;

use Illuminate\Http\Request;  // ①'

class ArticlesController extends Controller {

    // ...

    public function store(Request $request) {  // ①
        $rules = [    // ②
            'title' => 'required|min:3',
            'body' => 'required',
            'published_at' => 'required|date',
        ];
        $validated = $this->validate($request, $rules);  // ③

        Article::create($validated);

        return redirect('articles');
    }
}

①リクエストの取得方法を変更しました。
前回は \Requestファサードを使って、リクエストにアクセスしましたが、今回は store メソッドの引数から Illuminate\Http\Request クラスのインスタンスを取得するようにしました。
Laravel のコントローラはメソッドの引数にタイプヒントでクラスを記述すると、そのクラスのインスタンスを自動生成して渡してくれます。とてもクールです。

②バリデーションルールを設定しています。
バリデーションルールの詳細は公式ドキュメントを参照してください。
https://laravel.com/docs/5.6/validation#available-validation-rules

③コントローラの validate() メソッドを実行しています。
ここでエラーがあると、自動的に前の画面にリダイレクトしてくれます。これまたクールです。


View

Form画面にエラー表示を追加ます。
$errors にエラーメッセージが複数格納されるので、@foreach を使って件数分表示しています。

// resources/views/articles/create.blade.php

@extends('layout')

@section('content')
    <h1>Write a New Article</h1>

    <hr/>

    {{-- エラーの表示を追加 --}}
    @if ($errors->any())
        <div class="alert alert-danger">
            <ul>
                @foreach ($errors->all() as $error)
                    <li>{{ $error }}</li>
                @endforeach
            </ul>
        </div>
    @endif

    {!! Form::open() !!}
        ...
    {!! Form::close() !!}
@endsection

動作確認

念の為、全ての項目を入力し正常に記事が登録されることも確認してください。


まとめ

入力値のチェックとエラーの表示ができるようになりました。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中