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

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

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

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

544閲覧

Laravel5.4で複数のチェックボックスの値をFlashセッションから復元したい

sh-ogawa

総合スコア43

PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2017/07/06 07:13

編集2017/07/06 07:25

いつもお世話になっております。
以下のような実装をしているチェックボックスを配置した画面において、
Flashセッションから値を復元するスマートな方法が知りたいです。

チェックボックスについて

  • 複数のチェックボックスの中から必ず1つを選択しなくてはいけない
  • チェックボックス自体は、別の画面からDBに登録することで、いくらでも増やすことができる
  • チェックボックスの状態はFormValidatorで一括チェック
  • チェック状態はPOSTデータとして送信する

ソースコード

blade

1//bladeテンプレート 2@foreach($elements as $element) 3{!! Form::checkbox('chkboxes[]'.$element['value'], $element['value'], old('chkboxesの配列の要素から任意の値を取りたい')) !!} 4@endforeach

PHP

1class MyFormRequest extends FormRequest { 2 /** 3 * Get the validation rules that apply to the request. 4 * 5 * @return array 6 */ 7 public function rules() 8 { 9 return [ 10 'chkboxes' => 'required', 11 ]; 12 } 13} 14

PHP

1class UserController extends Controller { 2 3 public function test(MyFormRequest $request) 4 { 5 $request->flash(); 6 return view('test'); 7 } 8}

試したこと

  • old('chkboxes')[0]でchkboxes配列の最初の要素に入っている$element['value']の値は取れる

ただし、接尾に必ず'1'が入ってくる
例:$element['value']が'10'の場合、oldで取ると、なぜか'101'になる

  • Form::checkbox('chkboxes[]' をやめる

復元は可能になるが、validationは纏めてチェックしてくれなくなるため、処理が冗長になる

課題

  • chkboxesの値は、チェックされているものだけがPOSTパラメータに乗るため、配列の要素としては前詰まりになる。

array_searchなど使えば取れるとは思いますが、ゴリゴリ感があるため、もっと綺麗に実装したい。

  • 末尾に必ず'1'が書かれているのを、文字列変換以外で何とかしたい。(バグなのかな・・・)

何か良い書き方がありましたら、教えてください。
よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Form::checkboxはエラー時にチェック状態を復元する機能をデフォルトで備えています。
ですので、第三引数を特に指定せずとも、エラー時のチェックは自動で行ってくれます。

参考ソース:html/src/FormBuilder.php

また、質問中のForm::checkboxの第一引数に余分な$element['value']がついているように見えます。

PHP

1@foreach($elements as $element) 2 {!! Form::checkbox('chkboxes[]', $element['value']) !!} 3@endforeach

こんな感じで動作しないでしょうか。

投稿2017/07/06 22:31

Archsted

総合スコア452

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

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

sh-ogawa

2017/07/07 01:05

ご回答ありがとうございます。 教えていただいた内容でイケました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問