【Laravel-admin】チェックボックスがcheckedにならない不具合対応
laravel-adminのformに不具合がありましたので 内容と解決策を備忘録がてらメモ laravel:6.20 laravel-admin:1.7 どうやら、前回修正した内容では不十分だったようです。 laravel-admin 編集画面でcheckboxをchekcedにする
Laravel-admin不具合の内容
会員登録などでチェックボックスを用いた会員属性を設定したとします。 下記のように登録フォームを作成し、登録を完了します。

DBには正しく登録されていることを確認 次に編集画面に遷移してみると

なぜか
最初のチェックボックスにのみチェックが入らない
formの処理が怪しいので、確認していきます。
解決方法
最初のチェックボックスのみ、chekedがついておりません。 すべての項目にチェックを付けた場合、DB上は下記のように登録されております。 ["0","1","2"] 「0」の場合にチェックがつかないということですね。
ソース
こちらが修正前のソース 修正箇所を明示するために不自然に改行しております。 4行目辺りがcheckedの判定ロジックであることが分かります。 ここで使っている「array_filter」を調べてみると、第二引数の説明で
コールバック関数が与えられなかった場合、arrayのエントリの中で空のものはすべて削除されます。
と記述があります。これが原因ですね。 「0」が空と判断されて、削除されているようです。 ということで、第二引数にコールバック関数を与えます。
checkbox.blade.php 1234 <input type=
"checkbox"
name=
"{{$name}}[]"
value=
"{{$option}}"
class
=
"{{$class}}"
{{ false !==
array_search
(
$option
,
array_filter
(old(
$column
,
$value
?? [])))
|| (in_array(
$option
,
$checked
)) ?
'checked'
:
''
}} {!!
$attributes
!!} />{{
$label
}}
各数字に対してtrueを返してくれればなんでもいいのですが
今回はis_numericを利用しました。
checkbox.blade.php 1234 <input type=
"checkbox"
name=
"{{$name}}[]"
value=
"{{$option}}"
class
=
"{{$class}}"
{{ false !==
array_search
(
$option
,
array_filter
(old(
$column
,
$value
?? []),
'is_numeric'
))
|| (in_array(
$option
,
$checked
)) ?
'checked'
:
''
}} {!!
$attributes
!!} />{{
$label
}}
これで問題なく選択済み項目については「checked」がつくようになりました。