Cakephp4のcheckboxでvalue=”1″にしかならなかった件について

Web開発
この記事は約3分で読めます。

こんにちは、@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

まとめ

バージョンが違うと、機能が変更されていてそのまま使用できない場合もあるんですね。

これだと簡単にバージョンアップするのは難しく、計画的に実行する必要があるということを学習しました。

同じ事象が発生した場合は、ぜひ参考にしてください。