LoginSignup
29

More than 3 years have passed since last update.

Laravel チェックボックスのchecked="checked"はどうやって表示させるの?

Last updated at Posted at 2018-06-05

結論

これ↓

blade
<input type="checkbox" name="fluits[]" value="1"
{{ is_array(old("fluits")) && in_array("1", old("fluits"), true)? 'checked="checked"' : '' }}
>

以下結論に至った流れ

はじめに

・laravelのview(~~~.blade.php)です
・どうしてもinputタグを使って今回の問題をクリアしたい
・Form::checkbox()メソッドは使いたくない
・チェックボックスは複数選択されるものとする

リダイレクトした際にチェックされない

blade

<input type="checkbox" name="fluits[]" value="1" {{ old("fluits") === "1"? 'checked="checked"' : '' }}>
<!-- nameを配列[]にすることで、複数選択された場合でも値が全て取得できる -->

{{}}の中は三項演算子

blade

{{ old("fluits") === "1"? 'checked="checked"' : '' }}
<!-- ↑はつまりこういう↓こと -->
@if(old("fluits") === "1")
  checked='checked'
@else

@endif
<!-- old()で直前の入力値を取得して値と比較し、trueならchecked="checked"を返す -->

しかし取得した値は配列なのでこれじゃうまくいかない;

in_array()で配列に値があるかチェックする

blade

<input type="checkbox" name="fluits[]" value="1" {{ in_array("1", old("fluits"), true)? 'checked="checked"' : '' }}>

これだとold()で取得した値がNULLのとき怒られる;
【in_array() expects parameter 2 to be array, null given】

is_array()、in_array()を併用して解決

blade
<input type="checkbox" name="fluits[]" value="1" {{ is_array(old("fluits")) && in_array("1", old("fluits"), true)? 'checked="checked"' : '' }}>

今のところこれしか思いつかないよ(´・ω・`)

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29