以下のコードについて、お聞きしたいことがあります。コードは該当の部分を抜粋して記載してあります。
下記はreservation_info.blade.phpです。
<div class="input_info_box"> @if(count($errors) > 0) <div class="errors_box"> <ul> @foreach($errors->all() as $error) <li class="error_message">{{$error}}</li> </ul> @endforeach </div> @endif <h3 class="infomation_title">下記の情報を入力してください</h3> <form class="info_table_form" action="/reserve/confirm_form" method="post"> {{ csrf_field() }} <input type="hidden" name="date" value="{{$reserved_date}}({{$reserved_dayOfWeek}}){{$reserved_time}}~"> <table class="input_info_table"> <tr><th>来院目的</th><td>初めての来院 (初めて〇〇〇動物病院に来院さ…</td></tr> <tr><th>希望日時</th><td>{{$reserved_date}}({{$reserved_dayOfWeek}}){{$reserved_time}}~</td></tr> <tr> <th>飼い主様名<span class="required_check">必須</span></th> <td class="input_name"> <p class="input_content_name">姓</p><input type="text" name="last_name"size="15" value="{{old('last_name')}}" > <p class="input_content_name">名</p><input type="text" name="first_name"size="15" value="{{old('first_name')}}" > </td> </tr> <tr> <th>フリガナ<span class="required_check">必須</span></th> <td class="input_name_furigana"> <p class="input_content_name_f">セイ</p><input type="text" name="last_name_furigana"size="15" value="{{old('last_name_furigana')}}" > <p class="input_content_name_f">メイ</p><input type="text" name="first_name_furigana"size="15" value="{{old('first_name_furigana')}}" > </td> </tr> <tr> <th>患者様名<span class="required_check">必須</span></th> <td class="animal_name_td"><input type="text" name="input_animal_name" size="30" name="input_animal_name" value="{{old('input_animal_name')}}"></td> </tr> <tr> <th>種類(犬、猫など)<span class="required_check">必須</span></th> <td> <select name="animal_type"> <option value="犬種" selected>犬種</option> <option value="猫種">猫種</option> <option value="その他">その他</option> </select> </td> </tr> <tr> <th>TEL<span class="required_check">必須</span></th> <td> <input type="text" name="tel[]" maxlength="5" size="7"> <span>ー</span> <input type="text" name="tel[]" maxlength="5" size="7"> <span>ー</span> <input type="text" name="tel[]" maxlength="5" size="7"> </td> </tr> <tr> <th>メールアドレス<span class="required_check">必須</span></th> <td class="mail_td"><input type="text" name="mail" value="{{old('mail')}}"></td> </tr> <tr> <th class="other_th">その他<p class="other_description"><span class="color_red">※</span>動物種名でその他を入力された方は動物種名を入力してください</p></th> <td class="other_td"><textarea name="other" maxlength="100"></textarea></td> </tr> </table> <a class="back_button info_back_button" href="javascript:history.back()">戻る</a> <input class="check_input_form" type="submit" value="確認する"> </form> </div>
下記は、web.phpになります。
Route::post('/reserve/reservation_time','ReserveController@reserve_time'); Route::post('/reserve/infomation','ReserveController@reserve_info');
以下は、ReserveController.phpです。
php
public function reserve_time(Request $request){ // dd($request->calendar_date); $reserve_date = $request->calendar_date; // dd($reserve_date); // dd($reserve_date); $reserved_time_list = Reservation::where('reservation_date','like',$reserve_date.'%')->pluck('reservation_date'); // dd($reserved_time_list); //carbonオブジェクトに変換 foreach($reserved_time_list as $key => $reserved_time){ $reserved_time_list[$key] = Carbon::parse($reserved_time); } //予約された日にちの年月日取得 $current_date = new Carbon(); $reserve_date = Carbon::parse($reserve_date); // dd($reserve_date); $date_format = $reserve_date->format('Y-m-d'); $date_display_formt = $reserve_date->format('Y年m月d日'); $day_of_number = $reserve_date->dayOfWeek; // dd($day_of_number); // $reserved_time = $reserved_time_list[0]->format('Y-m-d'); // dd($reserved_time); // 予約可能時間 $time = Carbon::parse($date_format.'10:00:00'); // dd($time); for($i =0; $i < 17; $i++){ // dd($time); // var_dump($time); if(!$time->between(Carbon::parse($date_format.'12:00:0'),Carbon::parse($date_format.'13:30:0'))){ // var_dump($time); $available_time_zone[] = $time->copy(); } $time = $time->addMinutes(30); } // dd($available_time_zone); // dd($reserved_time_list); $occupied = ''; foreach($reserved_time_list as $time_list){ foreach($available_time_zone as $time_zone){ $time = $time_list->format('H:i'); $time_zone_format = $time_zone->format('H:i'); // dd($time_zone_format); // dd($time); if($time == $time_zone_format){ $occupied = $time_zone_format; } } } // dd($occupied); switch($day_of_number){ case 0: $day = '日'; break; case 1: $day = '月'; break; case 2: $day = '火'; break; case 3: $day = '水'; break; case 4: $day = '木'; break; case 5: $day = '金'; break; case 6: $day = '土'; break; } // dd($is_reservation); return view('reserve.reservation_time',compact('date_display_formt','day','occupied')); } public function reserve_info(Request $request){ // dd($request->time); $reserved_time = $request->time; // dd() $reserved_date = $request->date; // dd($reserved_date); // dd($request->dayOfWeek); $reserved_dayOfWeek = $request->dayOfWeek; // echo url()->previous(); // dd(); // dd($reserved_dayOfWeek); return view('reserve.reservation_info',compact('reserved_time','reserved_date','reserved_dayOfWeek')); } public function confirm_form_data(Request $request){ // $last_name = $request->last_name; // $first_name = $request->first_name; // $last_name_furigana = $request->last_name_furigana; // $first_name_furigana = $request->first_name_furigana; // $input_animal_name = $request->input_animal_name; // $animal_type = $request->animal_type; // $tel = $request->tel; // $mail = $request->mail; // $other = $request -> other; $validator = Validator::make($request->all(),[ 'last_name' => 'bail|required|string|max:20', 'first_name' => 'bail|required|string|max:20', 'last_name_furigana' => 'bail|required|string|katakana|max:30', 'first_name_furigana' => 'bail|required|string|katakana|max:30', 'input_animal_name' => 'bail|required|max:50', 'tel.*' => 'bail|required|numeric|digits_between:3,5', 'mail' => 'bail|required|email', 'other' => 'bail|required_if:animal_type,その他|max:100', ]); if($validator->fails()){ $instance = redirect('/reserve/redirect_form'); $errors = $instance->withErrors($validator); // var_dump($errors); // exit(); } // $a = redirect('/reserve/infomation'); // var_dump($a); // exit(); // var_dump(method_exists($a, 'withErrors')); // var_dump(redirect('/reserve')); // exit(); $input_form_datas = $request->all(); $tel = implode('-',$input_form_datas['tel']); // dd($input_form_datas); unset($input_form_datas['tel']); // dd($tel); return view('reserve.confirm',compact('input_form_datas','tel')); }
お聞きしたいのは、reservation_info.blade.phpからpostした場合、ルーティングによりReserveControllerのconfirm_form_dataアクションが処理されますが、ここでバリデーションにより失敗した場合リダイレクトさせてしまうとgetアクセスとなってしまい、エラーが発生してしまいます。ですが、バリデーションで失敗した場合には、前の画面(reservation_info.blade.php)を表示し、エラーも表示したいと考えています。
redirectの場合は必ずpostになってしまう為、方法がみつかりません。
解決策など、ご存じの方いましたら教えて頂けましたら幸いです。
よろしくお願いします。
※追記です。
confirm_form_dataアクション内にて、以下のように、reserve_info.blade.phpにreturnした場合、html部分の<tr><th>希望日時</th><td>{{$reserved_date}}({{$reserved_dayOfWeek}}){{$reserved_time}}~</td></tr>
こちらの$reserved_dateなどの変数の表示はどうすれば良いのかといった部分でつまずいてしまいました。
if($validator->fails()){ $instance = redirect('/reserve/reserve_info'); $validation_data = $instance->withErrors($validator)->withInput(); return view('reserve.reservation_info',compact('validation_data')); }
まだ回答がついていません
会員登録して回答してみよう