Blog スタッフブログ

Laravel システム開発

[Laravel]Laravelでの条件付きバリデーション

システム開発担当のTFです。

※Laravel8系統対応

やり方

  • bladeでフォーム作成
  • FormRequestを作成し、rulesを設定する
  • exclude_if, exclude_unlessを用いれば条件付きのバリデーションが可能
  • Controllerで、作成したFormRequestを使用する

参考

  Laravel 8.x バリデーション
  【Laravel】 Requestを継承してバリデーションをする

サンプル

<form action="{{ route('request.store')}}" method="POST">
	@csrf
	<div>
		<div>
			<input id="kind01" type="radio" name="kind" value="1"  @if(old('kind')==1) checked @endif></input>
			<label for="kind01">種類1</label>
		</div>
		<div>
			<input id="kind02" type="radio" name="kind" value="2" @if(old('kind')==2) checked @endif></input>
			<label for="kind02">種類2</label>
		</div>
		<div>
			<input id="kind03" type="radio" name="kind" value="3" @if(old('kind')==3) checked @endif></input>
			<label for="kind03">種類3</label>
		</div>
	</div>
	<div>
		種類が3以外なら入力必須
		<input class="@error('text1') error @enderror" type="text" name="text1" value="{{old('text1')}}"></input>
	</div>
	<div>
		種類が1なら入力必須
		<input class="@error('text2') error @enderror" type="text" name="text2" value="{{old('text2')}}"></input>
	</div>
	
	<button>送信</button>
</form>
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class SampleRequest extends FormRequest
{
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
			,'kind'=>'required'
			
			,'text1'=>'exclude_if:kind,3|required' // kindが3以外なら入力必須
			
			,'text2'=>'exclude_unless:kind,1|required' // kindが1なら入力必須
			
		];
    }
	
	public function messages()
	{
		return [
			'required' => '必須入力です',
		];
	}
}
<?php

namespace App\Http\Controllers;

use App\Http\Requests\SampleRequest;

class RequestController extends Controller
{
    public function store(SampleRequest $request)
    {
		// 登録処理
    }
    
}