WEBサイト制作・アプリ開発・システム開発・ブランディングデザイン制作に関するご相談はお気軽にご連絡ください。
構想段階からじっくりとヒアリングし、お客様の課題にあわせたアプローチ手法でお客様の“欲しかった”をカタチにしてご提案いたします。
Blog スタッフブログ
Laravel
システム開発
[Laravel]Laravelでの条件付きバリデーション2
システム開発担当のTFです。
前回より、複雑な条件のバリデーション処理の仕方です。
前回
※Laravel8系統対応
やり方
- bladeでフォーム作成
- FormRequestを作成し、withValidatorを設定する
- Controllerで、作成したFormRequestを使用する
参考
Laravel の FormRequest で sometimes を使いたい時は withValidator メソッド経由が良さ気
withValidatorを使い、バリデーション後にバリデーションをする
サンプル
<form action="{{ route('request.store')}}" method="POST">
@csrf
<div>
<div>
<label>数値a</label>
<input type="number" name="value_a" >
</div>
<div>
<label>数値b(数値aの 2分の1以上)</label>
<input type="number" name="value_b" >
</div>
</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 [
,'value_a'=>'required|numeric'
,'value_b'=>'required|numeric'
];
}
public function withValidator(\Illuminate\Contracts\Validation\Validator $validator)
{
// 数値a
$value_a = $this->input('value_a');
// 数値b
$value_b = $this->input('value_b');
$validator->after(function ($validator) use($value_a, $value_b) {
// 数値aの 2分の1より小さい
if($value_b < $value_a / 2) {
$validator->errors()->add('value_b', '数値aの 2分の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)
{
// 登録処理
}
}