質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.45%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2099閲覧

Laravelのバリデーションが通過できない

notosan_as

総合スコア1

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/10/28 12:46

プログラミング初心者です。
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でバリデーションする方法を教えていただきたいです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

HTML が配列だから

public function rules() { return [ 'memo' => 'max:500', 'time.*' => 'integer', ]; }

投稿2021/10/28 15:09

phper.k

総合スコア3923

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

notosan_as

2021/10/28 23:10

上記のように修正したら無事にバリデーション通過しました! 長時間悩んでいたのでとても嬉しいです。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.45%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問