こんにちは、@Manabu です。
最近、cakephpを2から4にバージョンアップする機会がありました。
その中でcheckboxの設定がうまくいかなかった件について紹介します。
前提
cakephp2では以下のコードでcheckboxを設定していました。
<?php
echo $this->Form->input('name',
array('type'=>'checkbox','value'=>'値')
);
?>
これで生成されるのは以下です。
<input type="checkbox" name="name" value="値">
発生した事象と解決策
cakephp4環境で同じフォームの設定を使用した時に発生した内容と、解決策についてです。
発生した事象
cakephp2で元々使用していたソースを試すと以下のようなcheckboxが生成されました。
<input type="checkbox" name="name" value="1">
valueに値という文字を設定しているはずなのに、生成されたinputタグのvalueは“1”になっています。どんな値を設定しても必ず”1″になってしまいます。
解決方法
以下のコードに書き換えると意図した形になりました。
<?php
echo $this->Form->control('name',
array('type'=>'checkbox','value'=>'値')
);
?>
このコードで生成されるのは、以下の内容です。
<div class="input checkbox">
<input type="hidden" name="name" value="0">
<label for="name"><input type="checkbox" name="name" value="シングル" id="name">Name</label>
</div>
ラベルまで作成してくれるんですね〜
公式サイトを見ると「FormHelper::input」メソッドが、バージョン3以降「FormHelper::control」メソッドに置き換えられたことに原因があるようです。
以下、公式サイトのリンクになります。
※Cakephp2のFormHelper
※Cakephp4のForm
まとめ
バージョンが違うと、機能が変更されていてそのまま使用できない場合もあるんですね。
これだと簡単にバージョンアップするのは難しく、計画的に実行する必要があるということを学習しました。
同じ事象が発生した場合は、ぜひ参考にしてください。