Upload
yandod
View
2.829
Download
5
Embed Size (px)
DESCRIPTION
Zend_Formの使い方
Citation preview
Zend_FormZ F で モ ダ ン な フ ォ ー ム 処 理
2 0 1 2 / 5 / 7
PHPカンファレンス北海道2012 / Yusuke Ando (@yando)
agenda
Form Basics
Form
Element
Validate
Formの処理
Webアプリに頻出する
扱う必要があるタグの種類が豊富
様々なバリデーションも要求される
JavaScriptとの連携も求められる
独自実装は危険ビューが大量のifやforeachであふれる
基本的な書式チェックでのバグリスク
フォームの仕様は膨らみやすい
ex) 複数選択ドロップダウン 初期値のフィルイン 「ここから選択してください」
ライブラリに任せるPEAR HTML_QuickForm2
ZendFramework Zend_Form
ZendFramework2 Zend\Form\Form
symfony 1 sfForm
Symfony2 Symfony\Component\Form
FuelPHP Fuel\Core\Form
CakePHP FormHelper
ライブラリによってバリデーションなどに違い
Zend_Form
Zend_Form
フォーム全体を担当するZend_Form
各要素はZend_Form_Element
検証はZend_Validate
整形などはZend_Form_Decorator
基本的な流れZend_Formのオブジェクトを作成
必要な入力要素のElementをセット
ElementにValidateをセット
ビューではFormのオブジェクトをecho
コントローラーではFormのisValidで検査
とりあえずの例
実行結果
HTMLタグがオブジェクトから自動生成される(エラーメッセージや、タグのカスタマイズも可能)
Element超豊富ButtonCaptchaCheckboxFileHiddenHashImage
MultiCheckbox
MultiselectPasswordRadioResetSelectSubmitText
Textarea
この書き方はマズイ
サブクラス作成
Zend_Formのサブクラスを作成
オプション設定やElementの生成はinit
再利用性アップ
ユニットテストできるようになる!
サブクラス化
Validateby splorp
バリデーション
Zend_Validateのオブジェクトを生成
各ElementにaddValidator()する
isValid()にデータを渡して検証
検証済のデータはgetValues()で取得
フォームへの設定
検証の実行
実行結果
Validatorバリ豊富AlnumAlphaBarcodeBetweenCallbackCc
CreditCardDate
DB_NoRecordExistDB_RecordExist
DigitsEmailAddress
FileFloat
GreaterThanHex
HostnameIbanIdenticalInArrayIntIpIsbn
LessThanNotEmptyPostCodeRegex
StringLength
Validateの自作
Zend_Validate_Interfaceをimplementsしたクラスを作成
isValidとgetMessagesを定義
isValid内で任意のロジックで判定
通常と同じくElementへaddValidator
Validatorを自作
Validatorを設定
実行結果
Decoratortwokingsconfections
フォームの整形
フォーム全体をrenderした時
要素をrenderした時
自動で様々なタグ付けを行なっている
拡張したり差し替えも可能
要素を直接表示
フォームオブジェクト->要素名を参照
標準では HtmlTag Label Errorsなどが設定済み
拡張したり差し替えも可能
エラーはgetErrorsで取得する
Decoratorを解除
実行結果
後は自由にマークアップを記述すれば良い
まとめフォームにはZend_Formを使おう
Zend_Formのサブクラスを作る
Zend_Form_Elementで要素を設定
検証はZend_Validate
ビューでは状況に応じて表示
サンプル?
https://github.com/yandod/php-form-sample