前提・実現したいこと
Laravel5.8で勤怠システムを作成しています。
テーブルの形で、出勤時間、退勤時間、合計時間、作業内容、プロジェクトコードに入力欄があります。
formは下記のようになっています。(inputが入力欄の想定)
出勤時間 | 退勤時間 | 合計時間 | 作業内容 | プロジェクトコード |
---|---|---|---|---|
input | input | input | input | input |
input | input | input | input | input |
input | input | input | input | input |
行は複数行同時登録可能な仕様です。
それを、登録のためPOSTした際のバリデーションで
1行目は必須、2行目は出勤時間があれば、退勤時間必須...のようにバリデーションをかけたいです。
発生している問題・エラーメッセージ
POSTした際に、何も入力していない場合、nullの配列が送られ、思うようにバリデーションがかかりません。
該当のソースコード
ここでは10個決め打ちしていますが実際は何個になるか不明です。
Blade
HTML
1<table class="table white-space-nowrap"> 2 <thead> 3 <tr> 4 <th scope="col">出勤時間</th> 5 <th scope="col">退勤時間</th> 6 <th scope="col">合計</th> 7 <th scope="col">作業内容</th> 8 <th scope="col">pj番号</th> 9 </tr> 10 </thead> 11 <tbody> 12 @for ($i = 0; $i < 10; $i++) <tr> 13 <td> 14 <input type="text" placeholder="00:00" name="start_time[]"> 15 </td> 16 <td> 17 <input type="text" placeholder="00:00" name="end_time[]"> 18 </td> 19 20 <td class="input-size-s"> 21 <input type="text" name="sum_time[]" disabled="disabled" placeholder="合計"> 22 </td> 23 <td> 24 <input type="text" placeholder="作業内容" name="work_content[]"> 25 </td> 26 <td> 27 <input type="text" disabled="disabled" name="pj_num[]" placeholder="pj番号"> 28 </td> 29 </tr> 30 @endfor 31 </tbody> 32</table>
FormRequest
PHP:
1 public function rules() 2 { 3 return [ 4 'start_time' => 'required|array|min:1|', 5 'start_time.*' => 'nullable|date_format:H:i|', 6 'end_time' => 'required|array|min:1', 7 'end_time.*' => 'required_with:start_time.*|date_format:H:i|after:start_time.*', 8 'sum_time' => 'required|array|min:1|', 9 'sum_time.*' => 'required_with:start_time.*|date_format:H:i|', 10 ]; 11 }
試したこと
バリデーションがかかる前に、array_filter
でnullを削除しようとしましたが、全部からだとエラーが出てうまくできていません。
大変申し訳ありませんが、お力を貸していただけますと助かります。
初めての質問で不備等ありましたら追記しますので、宜しくお願い致します。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/05 02:51