blocs/blocs: バリデーション条件の指定
blocs/blocs: バリデーション条件の指定
テンプレート内でフォーム入力のバリデーション条件を指定する方法を説明します。
基本的な使い方
data-form で対象フォーム部品を指定し、data-validate にバリデーション条件を記述します。コメント記法でのみ使用可能です。複数条件はパイプ(|)で区切ります。
data-lang でカスタムエラーメッセージを設定できます。省略時はLaravelのデフォルトメッセージが表示されます。
<input type="text" name="name">
<!-- data-form="name" data-validate="required" data-lang="必須入力です。" -->
@error("name") <div class="invalid-feedback">{{ $message }}</div> @enderror
省略記法
必須でない項目には nullable を指定します。
<input type="text" name="name">
<!-- !name="nullable|max:50" data-lang="名前は50文字以下にしてください。" -->
@error("name") <div class="invalid-feedback">{{ $message }}</div> @enderror
HTML5 属性からのバリデーション自動生成
タグ記法のフォーム部品に HTML5 属性(required, minlength, maxlength, pattern 等)を付けると、BLOCS が Laravel バリデーションルールへ自動変換します。type="number" では min / max / step も変換対象ですが、min と max の両方が揃った場合のみルールが生成されます(片方だけでは変換されません)。data-validate を併用する場合は両方がマージされます。
<input type="text" name="name" required minlength="3" maxlength="50">
<input type="number" name="age" min="0" max="120" step="1">
required 以外の制約付き属性では、未入力を許容するため nullable が自動付与されます。
利用可能なバリデーションルール
以下はよく使うルールの抜粋です。Laravel 標準のその他ルール(regex, confirmed, unique, mimes など)も data-validate に指定できます。
必須・形式チェック
| data-validateの値 | チェック内容 |
|---|---|
| required | 入力が必須 |
| string | 文字列 |
| numeric | 数値 |
| integer | 整数 |
| boolean | 真偽値 |
| メールアドレス形式 | |
| date | 日付形式 |
| array | 配列 |
値の範囲・サイズチェック
| data-validateの値 | チェック内容 |
|---|---|
| min | 最小値以上(文字列は文字数、数値は値) |
| max | 最大値以下(文字列は文字数、数値は値) |
| between | 最小値と最大値の範囲内 |
| digits | 指定桁数の整数 |
QA
入力フォームの文字数を制限したい
<input type="text" name="name">
<!-- !name="nullable|max:50" data-lang="名前は50文字以下にしてください。" -->
@error("name") <div class="invalid-feedback">{{ $message }}</div> @enderror
入力値の重複チェックをしたい(論理削除対応)
softUnique は論理削除されたレコードを除外して重複を判定します。ルールクラスは App\Rules\softUnique として blocs/admin に同梱されています。
<input type="text" name="email">
<!-- !email="required" data-lang="メールアドレスは必須入力です。" -->
<!-- !email="softUnique:users" data-lang="メールアドレスはすでに登録されています。" -->
@error("email") <div class="invalid-feedback">{{ $message }}</div> @enderror