ユアスク by みんなシステムズ

MENU

1分で読める!開始日終了日のバリデーション設定例

2023/06/22

こんにちは、後藤です。

ウェブアプリケーション作成にあたって、「バリデーション」の設定は必須と言っても良いくらい重要です。今回は、Laravelのバリデーションルールの中でも「開始日と終了日」のバリデーションをどのように設定するかを紹介していきます。

バリデーションとは

バリデーションはアプリケーションのセキュリティと利便性を高めるための重要な機能です。Laravelでは、データのバリデーションを簡単かつ効率的に行うことができます。

基本的な開始日と終了日のバリデーション

まずは、以下のようにRequestクラスでバリデーションルールを設定する例を見てみましょう。ここではdateルールを使い、開始日と終了日が日付フォーマットであること、またafter_or_equalbefore_or_equalルールを使い、開始日が現在日またはそれ以降、終了日が開始日またはそれ以降であることを確認します。

public function rules()
{
    return [
        'start_date' => 'required|date|after_or_equal:today',
        'end_date' => 'required|date|after_or_equal:start_date',
    ];
}

カスタムバリデーションルールの作成

しかし、もっと複雑なケースでは、カスタムバリデーションルールの作成が必要になることもあります。例えば、開始日と終了日が同じ日であることを禁止したい場合などです。

Laravelでは、カスタムバリデーションルールを作成するための方法を提供しています。以下に、開始日と終了日が同じ日でないことを確認するカスタムバリデーションルールの例を示します。

use Illuminate\Validation\Rule;
use Illuminate\Support\Facades\Validator;

Validator::extend('not_same_day', function ($attribute, $value, $parameters, $validator) {
    $startDate = $validator->getData()['start_date'];
    $endDate = $validator->getData()['end_date'];

    return $startDate != $endDate;
}, 'The start date and end date cannot be the same.');

public function rules()
{
    return [
        'start_date' => 'required|date|after_or_equal:today',
        'end_date' => ['required', 'date', 'after_or_equal:start_date', 'not_same_day'],
    ];
}

これで、開始日と終了日のバリデーションがしっかりと行われるようになりました。

開始日終了日とは関係ありませんが、他にも

// 入力値が有効なメールアドレス形式であることを確認
'email' => 'email',

// 入力値の最小長または最小数値を指定
'password' => 'min:6',

// 入力値が指定されたデータベーステーブルの列に存在することを確認
'user_id' => 'exists:users,id',

など、バリデーションルールは多岐にわたります。調べてみるとたくさん出てくるので、ぜひ調べてみても良いでしょう。

まとめ

Laravelのバリデーション機能は非常に強力で、カスタムバリデーションルールを作成することでさまざまなシチュエーションに対応することができます。是非、この機能を活用して、より堅牢なアプリケーションを作成してみてください!