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

コメントする

就活アワード2012 受賞

本格SF宇宙戦争シュミレーションゲーム 宇宙神話モバイルプラネット

格闘系美少女学園RPG 闘女伝説モバイル学園

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

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

感動を与える仕事をする!COOのブログ

攻めのド営業 営業本部長ブログ

事業家を目指す新卒者ブログ

mixiアプリ企画・開発

バズービル写真

セレブスタイル

芝大門スタジオ

キッズスタイル

プライバシーマーク

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

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

カテゴリ

プロフィール

バズー株式会社
執行役員 CTO
海外事業部責任者
清水 樹 (Jun Shimizu)
慶應義塾大学理工学部卒業
日立ソフトウェアエンジニアリング出身
インドネシアのジャカルタでオフショア開発拠点設置中。