Laravel実践記

laravelでバリデーション(入力チェック)を使う方法

バリデーションとは?

バリデーションとはユーザーからの入力値がシステムが期待する形式や範囲、必須項目であれば入力値があるか等を検証するために使用される機能です。

バリデーションの例

フォームで名前、メールアドレス、年齢を送信し、それらをバリデーションする例を示します。

1.コントローラーの作成

FormControllerを作りform.bladeを表示する部分を作ります。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;


class FormController extends Controller
{
    public function index(Request $request)
    {
        return view('form');
    }
}

2.blade(フォーム)の設定

上記のコントローラーで開かれるbladeを作ります。

@if(session('success'))
    <div class="alert alert-success">
        {{ session('success') }}
    </div>
@endif

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

<form action="/form_send" method="post">
    @csrf
    <div class="form-group">
        <label for="name">お名前:</label>
        <input type="text" name="name" id="name" class="form-control" value="{{ old('name') }}">
    </div>

    <div class="form-group">
        <label for="email">メールアドレス:</label>
        <input type="email" name="email" id="email" class="form-control" value="{{ old('email') }}">
    </div>

    <div class="form-group">
        <label for="age">年齢:</label>
        <input type="number" name="age" id="age" class="form-control" value="{{ old('age') }}">
    </div>

    <button type="submit" class="btn btn-primary">送信</button>
</form>

3.ルーティング(web.php)の設定1

上記で作ったコントローラのindexにルーティングする様に設定します。

    Route::match(['get','post'],'/form',[FormController::class,'index']);

4.フォームを送信された時のバリデーションの設定

FormControllerに以下を追加します。

public function store(Request $request) {
    $request->validate([
        'name' => 'required|string|max:255',
        'email' => 'required|email|unique:users',
        'age' => 'required|integer|min:0|max:150',
    ]);

    // データの保存や処理...

    return redirect('/form')->with('success', '送信完了しました!');
}

5.ルーティング(web.php)の設定2

上記で作ったコントローラのstoreにルーティングする様に設定します。

    Route::post('/form_send',[FormController::class,'store']);

上記プログラムのバリデーションの説明

上記のプログラムでバリデーションをおこなっているのは「4.フォームを送信された時のバリデーションの設定」の部分になります。
このプログラムの


    $request->validate([
        'name' => 'required|string|max:255',
        'email' => 'required|email|unique:users',
        'age' => 'required|integer|min:0|max:150',
    ]);

の部分になります。
ここで、1つづつ見ていきましょう。

'name' => 'required|string|max:255',

こちらはフォームのお名前のバリデーションになります。
まずは、”required”です。こちらは”必須”の意味で、フォームのお名前欄に何も入力されていないとエラーを返します。
次は、”string”です。こちらは”文字列”の意味で、データが文字列でなければエラーを返します。
次は、”max:255”です。こちらは前述の”文字列”の最大文字数が255文字までということです。入力された文字列が255文字以上だった場合エラーを返します。

次は

'email' => 'required|email|unique:users',

まずは、”required”です。こちらは”必須”の意味で、フォームのお名前欄に何も入力されていないとエラーを返します。
次は、”email”です。こちらは”メールアドレス”の意味で、データがメールアドレスでなければエラーを返します。
次は、”unique:users”です。こちらはusersテーブルに登録されている唯一のものかどうかを検証しています。既にusersテーブルにあるメールアドレスだった場合はエラーを返します。

次は

'age' => 'required|integer|min:0|max:150',

まずは、”required”です。こちらは”必須”の意味で、フォームのお名前欄に何も入力されていないとエラーを返します。
次は、”integer”です。こちらは”整数”の意味で、データが数値でなければエラーを返します。
次は、”min:0”です。こちらは前述の”整数”の最小値が0ということです。入力された数値が-1だった場合エラーを返します。
次は、”max:150”です。こちらは前述の”整数”の最大値が150ということです。入力された数値が151だった場合エラーを返します。

バリデーションの種類

必須チェック-”required”

対象のフォームのデータに何も入力されていないとエラーが返されます。

文字列チェック-”string”

対象のフォームのデータが文字列でないとエラーが返されます。

下限チェック-”min”

対象のフォームのデータの数値や文字数の最小値の設定です。この最小値より小さい場合はエラーが返されます。

上限チェック-”max”

対象のフォームのデータの数値や文字数の最大値の設定です。この最大値より大きい場合はエラーが返されます。

メールアドレスチェック-”email”

対象のフォームのデータがメールアドレスでないとエラーが返されます。

単一性チェック-”unique”

対象のフォームのデータが単一でないとエラーが返されます。

整数チェック-”integer”

対象のフォームのデータが整数でないとエラーが返されます。

浮動小数点数チェック-”float ”

対象のフォームのデータが浮動小数点数でないとエラーが返されます。

ブール値チェック-”boolean”

対象のフォームのデータが真または偽でないとエラーが返されます。

日付チェック-”date”

対象のフォームのデータが日付でないとエラーが返されます。

数値チェック-”numeric”

対象のフォームのデータが数値(整数または浮動小数点数)でないとエラーが返されます。

配列チェック-”array”

対象のフォームのデータが配列でないとエラーが返されます。

オブジェクトチェック-”object”

対象のフォームのデータがオブジェクトでないとエラーが返されます。

-Laravel実践記

© 2024 Laravel World