Laravel における Fluent な数値バリデーションと条件付き禁止ルール
Laravel における Fluent な数値バリデーションと条件付き禁止ルール
こんにちは、皆さん!
この記事では、Laravel のバリデーションに関する最新アップデートとして、Fluent Numeric Validation と Conditional 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