Zend_Form_Element_Checkboxでハマる

| コメント(0) | トラックバック(0)

こんにちは、バズー株式会社、開発チームリーダーの清水です。

バズーでは、アプリケーションプラットフォームとして、PHP の Zend Framework を全面的に採用しています。フォームオブジェクトして標準コンポーネントの Zend_Form を使っているのですが、Zend_Form_Element_Checkbox でハマりました。

よく「プライバシーポリシーに同意する」にチェックボックスが付いていて、必ずチェックしないと先に進めないようなページがありますよね。Zend_Form_Element_Checkbox を使えば、このような感じのコードになります。

$form = new Zend_Form();
$element = new Zend_Form_Element_Checkbox('privacy');
$element->setRequired(true);
$element->addElement($element);

setRequired(true) つまり入力必須にすると、「Zend_Validate_NotEmpty」バリデータが自動的に追加されます(ここ重要)。

ここで、未チェック状態なら $form->isValid($_POST) が失敗するはずなのですが、なぜかエラーになりません。未チェック状態だと $_POST['privacy'] = "0" が飛ぶのですが、ソースを追った結果、Zend_Validate_NotEmpty が "0" を空っぽと認識してくれないのが問題ののようです。そもそも PHP では POST した値は数値でもすべて文字列として処理されるようです(なんて最悪な仕様なんだと思いますが・・・)。

試行錯誤した結果、$element->setUncheckedValue('') と空文字を設定してやれば上手くいくことがわかりました。

OKなパターン(メソッドでゴリゴリ編)

$form = new Zend_Form();
$element = new Zend_Form_Element_Checkbox('privacy');
$element->setRequired(true);
$element->setUncheckedValue(''); // クイックハック!
$element->addElement($element);

OKなパターン(INIファイル編)

xxx.elements.privacy.type = "checkbox"
xxx.elements.privacy.options.required = true
xxx.elements.privacy.options.uncheckedValue = ""

トラックバック(0)

トラックバックURL: http://tech.buzoo.jp/mt4/mt-tb.cgi/122

コメントする

携帯サイト作成のバズー株式会社

名経営者を志す 熱血社長ブログ

浜松町発進!攻めるディレクターブログ

mixiアプリ企画・開発

バズービル写真

セレブスタイル

芝大門スタジオ

キッズスタイル

プライバシーマーク

フィードメーター - 携帯サイト開発を極める!開発チームリーダーのブロ..

あわせて読みたいブログパーツ

カテゴリ

プロフィール

日々めまぐるしい勢いで変わるモバイルビジネスの中心で、開発現場から生の声をお届けします!
CTOを志す人、モバイルを極めたい人必見です!