お疲れ様です。
Laravelでチックボックスにcheckedが付きません。
以下、処理の流れと必要情報です。
※業務内容なので、かなり簡略化しました。
※すぐにヒントを頂きたかったので、疑似ソースは作りこめていません
処理の流れ
①画面にラジオボタンを表示する
②選択する
③POSTする
④バリデートエラーをだし、画面にとどまる
⑤その際にチェックボックスに直前の選択肢をチェックしたい
php
1'sample_check_box_arr' => 2 0 => string '1' //サンプル1 3 1 => string '2' //サンプル2 4 2 => string '3' //サンプル3 5'sample_txt' => string 'サンプル' //サンプルテキスト
コントローラー
php
1<?php 2 3use App; 4 5class SampleController { 6 7 /** 8 * 入力画面表示 9 */ 10 public function getIndex() 11 { 12 13 $login_data = Session::get('login_data'); 14 $input = Session::has('input') ? Session::get('input') : $login_data; 15 16 // view呼び出し 17 return $this->indexView($compact); // 実際の処理では$compact変数を作成し、使用 18 } 19 20 /** 21 * POST時に遷移してくる 22 */ 23 public function postConfirm() 24 { 25 $input = Input::all(); 26 // 入力値をSessionに保存する 27 Session::put('input', $input); 28 29 ///////////////////////////////////////////// 30 //////////// バリデートを行う //////////// 31 ///////////////////////////////////////////// 32 33 // バリデートエラーがあると 34 // 上記のgetIndexに戻り、ビューへ戻る 35 } 36}
ラジオボタンview
php
1{{-- 一部抜粋です --}} 2{{-- $sampleはオブジェクトです --}} 3@foreach($samples as $sample) 4 <label class="sample"> 5 {{ Form::checkbox( 6 'sample_check_box_arr[]', 7 $sample->value, 8 is_array($input->sample_check_box_arr) ? in_array($sample->value, $input->sample_check_box_arr) ? true : false : false, 9 [ 10 'id' => 'sample' . $sample->value, 11 ] 12 ) }} 13 {{-- 画面にサンプル1~5の文言を出します --}} 14 {{{ $trans_obj->trans($sample->name) }}} 15 </label> 16@endforeach 17コード
問題①
バリデートエラーをだし、画面にとどまった際、ラジオボタンがチェックされません。
$inputをセッションに入れる時にPOSTで送信した値と同じものが取得できてることは確認済みです。
検証でソースを確認しても、リロード時にはinputタグにchecked属性がついている以外の違いはなしです。
問題②
バリデートエラーをだし、画面にとどまった時はラジオボタンがチェックされていませんが、その状態でリロードすると、直前の選択がチェックされます。ですのでviewの書き方は悪くないと思っております。
問題③
is_array($input->sample_check_box_arr) ? in_array($sample->value, $input->sample_check_box_arr) ? true : false : false
のソースをvar_dumpをすると、バリデートエラーの直後、リロード時共に同じ値が取得できております。
質問
なぜ、バリデートエラーを出した直後の画面ではchekcedがつかないのでしょうか。全く分かりません。情報としては不十分かもしれませんが、心辺りがあれば教えてください。よろしくお願いします。
追記①
とりあえず解決しました。
本来のコード
php
1{{-- 一部抜粋です --}} 2{{-- $sampleはオブジェクトです --}} 3@foreach($samples as $sample) 4 <label class="sample"> 5 {{ Form::checkbox('sample_check_box_arr[]*' 6 . OriginalEncryptor::encrypt('tran_some_table' 7 . '*sample_check_box_arr' 8 . '*required|other_rule1|other_rule2,'), 9 $sample->value, 10 is_array($input->sample_check_box_arr) ? in_array($sample->value, $input->sample_check_box_arr) ? true : false : false, 11 [ 12 'id' => 'sample' . $sample->value, 13 ] 14 ) }} 15 {{-- 画面にサンプル1~5の文言を出します --}} 16 {{{ $trans_obj->trans($sample->name) }}} 17 </label> 18@endforeach
本来はシステム上、上記のようにバリデートルールなどを暗号化して、付与していました。
それを外すと事象は解決できました。(別の方法でバリデートをかける必要はありますが、、、。)
なぜなのだろう、、、、、。
あなたの回答
tips
プレビュー