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

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

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

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

PHP

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

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

Q&A

解決済

1回答

718閲覧

foreachで表示するラジオボタンのvalidationエラー時のvalueがold値にならない

gobindar

総合スコア51

Laravel

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

PHP

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

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

0グッド

0クリップ

投稿2019/03/16 04:49

編集2019/03/16 04:50

お世話になっております。
当方Laravel5.5にてWebSiteを構築しております、
環境はmac OS Mojave10.14.2
ブラウザはGoogle Chrome バージョン: 71.0.3578.98になります。

やりたいこと

下記を実装しておりますが、下記5番の問題が発生しています。
validationエラーに引っかかった場合でも、
value値にold値を持たせるためにはどうすればよいでしょうか?

  1. 入力画面にて、ラジオボタンで選択を行う

 (ラジオボタンの選択肢は、データベースから値を取得し、
view上でforeachを使用して表示しています)
0. 次の画面に進む確認ボタンを押下する
0. ラジオボタン以外の部分でvalidationエラー(required)となり
入力画面にリダイレクトされる
※この際ラジオボタンのチェックを1番で選択した箇所(old)で保持
0. validationエラーとなった項目を入力し、再度確認ボタンを押下
※この際、(1番で選択した箇所で維持されているため)ラジオボタンには触れない
0. ラジオボタンのvalueがnullとなっており(dd()を使用して確認)、
validationエラー(ラジオボタンのrequiredに引っかかる)となる

現状

validationでリダイレクトされた際も、
checkのoldは維持できているので、
valueのみが問題かと思いますが、
原因がわかりません。

Controller

php

1 public function upload_data() 2 { 3 $dataitems = $this->DataService->getdataitems(); 4 return view('data.upload_data',compact('dataitems')); 5 } 6 7 public function upload_data_confirm(DataValidationRequest $request) 8 { 9 $confrmdata = $request->all(); 10 $confrmdata['data_group_id'] = $confrmdata['data_group_id'][0]; 11 $user = \Auth::user(); 12 $showdataitems = $this->DataService->convertdataitems($confrmdata); 13 return view('data.upload_data_confirm',compact('user','showdataitems','confrmdata')); 14 } 15

DataService

php

1class DataService 2{ 3 public function getdataitems(){ 4 $this->data_group = DatagroupModel::pluck('data_group_name','data_group_id'); 5 return $this; 6 } 7 public function convertdataitems($data){ 8 $dataitems = $this->getdataitems(); 9 10 $showdataitems['data_group'] = $dataitems->data_group[$data['data_group_id']]; 11 12 return $showdataitems; 13 } 14 15}

入力画面のview

php

1 <?php 2 $i = 0; 3 foreach($dataitems->data_group as $key => $val) { 4 5 if(old('data_group_id[0]') === null) 6 { if($i === 0){$checked = "checked";} 7 else{$checked = '';} 8 } 9 else{ 10 if($i === old('data_group_id[0]')-1){$checked = "checked";} 11 else{$checked = '';} 12 } 13 14 echo "<div class='pretty p-default p-round vertical-align mx-1'> 15 <input type='radio' name='data_group_id[]' value='$key' {$checked}> 16 <div class='state'> 17 <label class='text-left my-auto'> 18 {$val} 19 </div> 20 </div>"; 21 $i++; 22 }; 23 24 ?> 25 @if ($errors->has('data_group_id')) 26 <span class="invalid-help-block"> 27 <strong>{{ $errors->first('data_group_id') }}</strong> 28 </span> 29 @endif 30

Validation

php

1class DataValidationRequest extends FormRequest 2{ 3 /** 4 * Determine if the user is authorized to make this request. 5 * 6 * @return bool 7 */ 8 public function authorize() 9 { 10 return true; 11 } 12 13 /** 14 * Get the validation rules that apply to the request. 15 * 16 * @return array 17 */ 18 public function rules(Request $request) 19 { 20 return [ 21 'data_group_id' => 'required', 22 ]; 23 } 24 25 public function attributes() { 26 return [ 27 'data_group_id' => 'データグループ', 28 ]; 29 } 30} 31

宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

自己解決

下記のコーディングで実現できました
(old値で返ってくるものが配列ではなかったため、[0]が不要でした)

php

1 <?php 2 $i = 0; 3 foreach($items->group as $key => $val) { 4 5 if(old('group_id') === null) 6 { if($i === 0){$checked = "checked";} 7 else{$checked = '';} 8 } 9 else{ 10 if($i === old('group_id')-1){$checked = "checked";} 11 else{$checked = '';} 12 } 13 14 echo "<div class='pretty p-default p-round vertical-align mx-1'> 15 <input type='radio' name='group_id[]' value='$key' {$checked}> 16 <div class='state'> 17 <label class='text-left my-auto'> 18 {$val} 19 </div> 20 </div>"; 21 $i++; 22 }; 23 24 ?>

投稿2019/03/17 07:53

gobindar

総合スコア51

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問