object_checkbox_tagを使う時の注意。


web関係の開発をしている人なら、チェックボックスにチェックされていない時にはその値が送信されないというのは誰でも知ってると思う。

例えば以下のフォームの場合、チェックされている場合にはfoo=1という値が送られるが、チェックされていない場合には(”foo=”というように空文字列が送られるのではなく)、fooという値自体が送られない。

<input type=”checkbox” name=”foo” value=”1″>

もちろんそれは知ってるんだけど、object_checkbox_tagを使ってオブジェクトの値によってフォームを生成する場合には、hiddenタグとかを併用してチェックされていない時でも0とか空文字列を送って欲しい気がする。

例えば、ユーザーアカウントを保持するテーブルにそのアカウントがロックされているかどうかを保持するboolean型のlockedという名前のフィールドがあるとする。ロックされているユーザーの編集画面を開くと、以下のようなobject_checkbox_tagによって出力されたチェックボックスにはチェックが付いている。

  echo object_checkbox_tag($user, 'getLocked',
array ('control_name' => 'user[locked]'));

ここでこのチェックを外して更新ボタンを押しても、そのままだとuser[locked]=0という値は送られないため、lockedフィールドは更新されない。

これを回避するためにはactionクラス内で以下のようにやる。

  if (!isset($user['locked']))
{
$this->user->setLocked(0);
}

最初に書いたけど、チェックされていない場合は自動的に0がセットされる仕組みがあればいいのにって思った。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です