プログラミング初心者です。
LaravelとPHPを主に使用して勉強時間と、メモを登録するというアプリを作成しています。
勉強時間をintegerでバリデーションしたいのですが、数値を入力してもバリデーションが通過できません。
テキストボックスから飛んできた後はStringだったので、int型に変えるためにprepareForValidationを使用し、時間をint型に変えました。
(そのままだと整数で指定してくださいというエラーが出たため)
rulesでvar_dumpしてtimeの型を確認しましたが、int型になっていました。
しかし画面では「整数で指定してください」というエラーが出ます。
PostRequest.php
PHP
1//バリデーション部分 2 public function authorize() 3 { 4 return true; 5 } 6 7protected function prepareForValidation() 8{ 9 $data = $this->validationData(); 10 11 $data['time'] = array_map('intval', $data['time']); 12 13 $this->replace($data); 14} 15 16/** 17 * Get the validation rules that apply to the request. 18 * 19 * @return array 20 */ 21public function rules() 22{ 23 return [ 24 'memo' => 'max:500', 25 'time' => 'integer', 26 ]; 27 } 28 29 public function attributes() 30 { 31 return[ 32 'body' => '本文', 33 'time' => '勉強時間', 34 ]; 35 } 36}
PostController.php
PHP
1//編集処理 2 public function update(PostRequest $request,$id) 3 { 4 5 $memo = $request->get('memo'); 6 Record::where('id',$id)->update([ 'memo' => $memo ]); 7 8 $studyid = $request->get('studyid'); 9 $times = $request->get('time'); 10 11 if(isset( $studyid )) 12 { 13 $studies = array_combine($studyid,$times); 14 15 foreach($studies as $key => $study) 16 { 17 StudyRecord::where('id',$key)->update([ 'time' => $study ]); 18 } 19 } 20 21 session()->flash('flash_message', '編集が完了しました'); 22 23 return redirect()->route('post.index'); 24 }
Post_edit.blade.php
PHP
1//画面表示一部分 2 <form method="POST" action="{{ route('post.update', ['post' => $post]) }}"> 3 @method('PATCH') 4 @csrf 5 <div class="form-group"> 6 <label></label> 7 8 @if(isset($studies)) 9 10 <div class="card-body pt-0 pb-2"> 11 <ul class="list-group study-list"> 12 13 @foreach( $studies as $study ) 14 <input type="hidden" name="studyid[]" value="{{ $study->id }}" /> 15 <li> <i class="fas fa-book size color"></i>{{ $study->item->item }}</li> 16 <li><input type="number" name="time[]" class="form-control input-time" value="{{ $study->time }}" />分 /</li> 17 @endforeach 18 19 </ul> 20 </div> 21 22 @endif 23 24 <textarea name="memo" required class="form-control" rows="16" placeholder="本文">{{ $post->memo }} 25 </textarea> 26 </div> 27 <div class="btn-mypage"> 28 <button type="submit" class="btn btn-post">編集</button> 29 </div> 30 </form>
このように数字で入力しても、エラーメッセージが出てしまいます。
時間をintegerでバリデーションする方法を教えていただきたいです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/28 23:10