– 入力フィールドが時間・分に別れている時に、「終了時間が開始時間より未来」のバリデーションルール作成方法
— どこで時間と分を結合してバリデーションをかけるか?
*.blade.php
<tr> <th>開始時刻 <span class="badge badge-danger">必須</span></th> <td> <div class="form-inline"> {!! Form::select('start_H', $hours, 10, ['class' => 'form-control']) !!} <span class="unit">時</span> {!! Form::select('start_i', $minutes, 1, ['class' => 'form-control']) !!} <span class="unit">分</span> </div> </td> </tr> <tr> <th>終了時刻 <span class="badge badge-danger">必須</span></th> <td> <div class="form-inline"> {!! Form::select('end_H', $hours, 19, ['class' => 'form-control']) !!} <span class="unit">時</span> {!! Form::select('end_i', $minutes, 1, ['class' => 'form-control']) !!} <span class="unit">分</span> </div> @error('end') <span class="error">{{$message}}</span> @enderror </td> </tr>
### controller
コントローラーでunix timeを計算し、「終了時間」-「開始時間」 <= 0 の時、withErrorsでエラーメッセージと一緒にredirect backする
[php]
public function confirm(CustomeRequest $request){
$inputs = $request->all();
$start = $inputs[‘start_H’] . ‘:’ . $inputs[‘remote_start_i’] . ‘:00’;
$end = $inputs[‘end_H’] . ‘:’ . $inputs[‘remote_end_i’] . ‘:00’;
if((strtotime($end) – strtotime($start)) <= 0) {
return redirect()->back()->withInput()->withErrors(array(‘end’ => ‘終了時刻は、開始時刻より未来を設定してください’));
}
[/php]
フォームリクエストやカスタムリクエストは、attribute、バリデーション処理、エラーメッセージが対になっているので、コントローラー側で処理をした。