laravel12.laravel_012
最終投稿日:2026年2月14日
<form method="POST">
@csrf
@if ($errors->any())
@foreach ($errors->all() as $error)
<div style="color:red;">{{ $error }}</div>
@endforeach
@endif
<BR />
@error('hoge')
<div class="valid-error">{{ $message }}</div>
@enderror
<input type="text" name="hoge" value="{{old('hoge')}}">
<BR />
@error('foo')
<div class="valid-error">{{ $message }}</div>
@enderror
<input type="text" name="foo" value="{{old('foo')}}">
<BR />
<button type="submit">送信</button>
</form>
| @csrf | 不正遷移対策の様なものです。POST遷移する場合は必須となります |
| $errors->any() | コントローラからの不特定のバリデーションエラーを感知します |
| $errors->all() | コントローラから取得した全てのエラー配列となります |
| @error('hoge') | コントローラから特定の(この場合は[name属性 = hoge])バリデーションエラーを感知します |
Route::get('/hoge', [App\Http\Controllers\HogeController::class, 'index'])->name('hoge.index');
Route::post('/hoge', [App\Http\Controllers\HogeController::class, 'mypost'])->name('hoge.mypost');
public function index(Request $request) {
return view('hoge/index', []);
}
public function mypost(Request $request) {
//
}
public function mypost(Request $request) {
$validated = $request->validate([
'hoge' => ['required', 'max:10'],
'foo' => 'required',
]);
}
public function mypost(Request $request) {
$validator = Validator::make($request->all(), [
'hoge' => 'required|max:10',
'foo' => 'required',
]);
// ダンプ
var_dump($validator->fails());exit;
}
メソッドチェーンで「->validate()」を付与すると、即座に例外が送出されます。
public function mypost(Request $request) {
$validator = Validator::make($request->all(), [
'hoge' => 'required|max:10',
'foo' => 'required',
]);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
}
| redirect()->back() | 同画面へれダイレクトする |
| withErrors($validator) | エラー内容関数にエラークラスから受けとった「$validator」を渡す |
| withInput() | 画面に入力した内容も返却する |
入力内容にエラーがない場合は、以下で入力内容を取得できます。
$validator->validated()
返却は例えばAPI用のJSONを返却する事もできます。
if ($validator->fails()) {
return response()->json([
'message' => 'バリデーションエラー',
'errors' => $validator->errors(),
], 422); // HTTPステータス422
}
$messages = [
'hoge.required' => '「HOGE」は必須です!',
'hoge.max' => '「HOGE」は最大:max文字です!',
'foo.required' => '「FOO」は必須です!',
];
$validator = Validator::make($request->all(), [
'hoge' => 'required|max:10',
'foo' => 'required',
], $messages);
'hoge' => ['required', 'max:10', function ($attribute, $value, $fail) {
if ($value == 'foo') {
$fail('ここは[' . $attribute . ']だっ!!');
}
}],
C:\~\laravel_12>php artisan make:rule UppercaseRule
INFO Rule [C:\~\laravel_12\app\Rules\UppercaseRule.php] created successfully.
C:\~\laravel_12>
<?php
namespace App\Rules;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
class UppercaseRule implements ValidationRule {
public function validate(string $attribute, mixed $value, Closure $fail): void {
//
}
}
<?php
namespace App\Rules;
use Closure;
use Illuminate\Contracts\Validation\ValidationRule;
class UppercaseRule implements ValidationRule {
public function validate(string $attribute, mixed $value, Closure $fail): void {
if ($value == 'hoge') {
fail('ここは[' . $attribute . ']だっ!!');
}
}
}
C:\~\laravel_12>php artisan make:request HogeRequest
INFO Request [C:\~\app\Http\Requests\HogeRequest.php] created successfully.
C:\~\laravel_12>
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class HogeRequest extends FormRequest {
public function authorize(): bool {
return false;
}
public function rules(): array {
return [
//
];
}
}
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class HogeRequest extends FormRequest {
public function authorize(): bool {
return true;
}
public function rules(): array {
return [
'hoge' => ['required', new UppercaseRule],
'foo' => ['nullable'],
];
}
}
public function mypost(HogeRequest $request) {
var_dump($request->validated());exit; // ダンプ
}
[HogeRequest]クラス内で、以下メソッドを追加するとメッセージ内容をオーバーライドできます。
public function messages(): array {
return [
'hoge.required' => '駄目!!',
];
}
| required | 空であってはならない(null、空文字(全角含む)、空配列NG) |
| required_if:hoge,"aaa" | 項目「hoge」の値が「aaa」の場合は必須 |
| required_with:hoge,bar, | 項目「hoge」「bar」のいづれかに値が存在する場合は必須(複数指定できる。) |
| nullable | nullを許容(項目が存在しなくてもOK) |
| filled | 項目が存在する場合は必須 |
| string | 文字列であること |
| min:10 | 最小10文字以上 |
| max:10 | 最大10文字以下 |
| size:10 | ちょうど10文字 |
| alpha | 英字のみ |
| alpha_num | 英数字のみ |
| alpha_dash | 英数字とハイフン、アンダースコアのみ |
| 有効なメール形式 | |
| url | 有効なURL形式 |
| regex:/^hoge.*end$/ | 正規表現マッチ(例は、[hoge]で始まり[end]で終わる文字列) |
| integer | 整数 |
| numeric | 数値 |
| digits:5 | ちょうど5桁 |
| digits_between:1,5 | 1〜5桁 |
| gt:10 | 10を超える事 |
| lt:10 | 10未満である事 |
| array | 配列であること |
| in:foo,bar | 指定値のいずれか |
| mimes:jpg,png | 指定拡張子のファイル |
| image | 画像ファイル |
| max:1024 | ファイルサイズ最大1MB |
| unique:users,email | usersテーブルのemailで重複なし |
| exists:users,id | usersテーブルのidが存在する |
ひとつの項目に複数のバリデーション定義をする場合は配列で定義します。