🙌

Laravel における Fluent な数値バリデーションと条件付き禁止ルール

2025/02/21に公開

Laravel における Fluent な数値バリデーションと条件付き禁止ルール

こんにちは、皆さん!
この記事では、Laravel のバリデーションに関する最新アップデートとして、Fluent Numeric ValidationConditional Prohibition Rules について紹介します。従来のバリデーション記述方法と比較し、より読みやすく、保守性の高いコードがどのように書けるかを見ていきましょう。


目次


Fluent Numeric Validation

従来、Laravel で数値のバリデーションルールは、以下のような文字列形式で定義されていました。

$rules = [
    'score' => 'numeric|integer|multiple_of:10|lte:some_field|max:100',
];

しかし、GitHub の @xoesae により、より構造化された方法で数値バリデーションルールを定義できる新しい Numeric クラスが導入されました。これにより、コードは以下のように流暢な記法で書くことができるようになります。

use Illuminate\Validation\Rules\Numeric;

$rules = [
    'score' => [
        Numeric::make()
            ->integer()
            ->multipleOf(10)
            ->lte('some_field')
            ->max(100),
    ],
];

このアプローチにより、バリデーションルールの意図がより明確になり、保守性も向上します。詳細については PR #54425 をご確認ください。


Conditional Prohibition Rules

また、GitHub の @osama-98 によって、バリデーションにおける 条件付き禁止ルール が追加されました。具体的には、以下の 2 つのルールです。

  • prohibited_if_accepted
  • prohibited_if_declined

これらのルールは、他のフィールドの状態に応じて、特定のフィールドが送信されるのを防ぐために使用されます。

例1: 他のフィールドが承認されている場合

たとえば、terms が承認されている場合に reason フィールドを禁止するには、以下のように定義します。

$rules = [
    'terms' => 'accepted',
    'reason' => 'prohibited_if_accepted:terms',
];

例2: 他のフィールドが拒否されている場合

同様に、terms が拒否されている場合に reason フィールドを禁止するには、次のように定義します。

$rules = [
    'terms' => 'declined',
    'reason' => 'prohibited_if_declined:terms',
];

これにより、フォームリクエストなどで意図しないフィールドの送信を防止することが可能になります。詳細については PR #54608 をご確認ください。


まとめ

今回紹介した新機能は、Laravel のバリデーションシステムをさらにパワフルかつ柔軟にするものです。

  • Fluent Numeric Validation により、数値に関するバリデーションルールを直感的かつ読みやすいコードで記述できるようになりました。
  • Conditional Prohibition Rules を活用することで、フィールドの状態に応じた柔軟なバリデーションが実現可能です。

Laravel を利用している開発者の皆さんは、ぜひこれらの新機能を試してみてください!


※ 本記事は Nabil Hassen さんの記事を翻訳・リメイクしたものです。元の記事の詳細については、こちら をご覧ください。

Discussion