前提・実現したいこと
後述のように、3つのチェックボックスがあるとして、そのうち1つ目と3つ目にチェックをして送信します。
その後、コントローラーの$request
にはチェックした値のみが入っています。
array:3 [▼ 0 => "hoge_1" 1 => "hoge_3" ]
これを、
array:3 [▼ 0 => "hoge_1" 1 => "" 2 => "hoge_3" ]
このようにすることはできないのでしょうか?
意図としては、post後にも同じページに遷移させ、チェックしたinputにはチェックを入れたいからです。
$request
にオンとオフの両方の値が入っていれば、それをforで回してチェックを入れるのは簡単にできるのですが、
オンしか値がないと、inputの数だけforで回して、その中で'$request'の値がinputのvalueを含んでいたらチェックする
みたいな処理になってしまい、ちょっとスマートとは言えない書き方になってしまうなと思い質問させていただきました。
blade
<div> <input type="checkbox" name="hoge[]" id="hoge_1" value="hoge_1"> <label for="hoge_1">hoge_1</label> </div> <div> <input type="checkbox" name="hoge[]" id="hoge_2" value="hoge_2"> <label for="hoge_2">hoge_2</label> </div> <div> <input type="checkbox" name="hoge[]" id="hoge_3" value="hoge_3"> <label for="hoge_3">hoge_3</label> </div>
コントローラー(一部)
public function handle(Request $request): View { return view('page', [ 'request_hoge' => $request->hoge ]); }
追記
kaya754さんの以下方法でうまくいったのですが、hoge1
の1
の部分を変数にする必要があります。(ここの値はDBから取ってこなければいけないので)
<input type="checkbox" name="hoge[]" id="hoge_1" value="hoge_1" @if(in_array('hoge_1',$request_hoge, true)) checked @endif>
そこで、以下のようにしたのですが、postしたら、チェックが全部外れた状態になってしまいます
単に私の書き方が悪いのだと思うのですが、どう書けばいいのでしょうか??
{{}}
を付け外ししたりしたのですがダメでした。
<input type="checkbox" name="hoge[]" id="hoge_{{ $val }}" value="hoge_{{ $val }}" @if(in_array('hoge_{{ $val }}',$request_hoge, true)) checked @endif>
回答3件
あなたの回答
tips
プレビュー