32
Zend_Form ZFでモダンなフォーム処理 2012/5/7

20120507 zendform

  • Upload
    yandod

  • View
    2.829

  • Download
    5

Embed Size (px)

DESCRIPTION

Zend_Formの使い方

Citation preview

Page 1: 20120507 zendform

Zend_FormZ F で モ ダ ン な フ ォ ー ム 処 理

2 0 1 2 / 5 / 7

Page 2: 20120507 zendform

PHPカンファレンス北海道2012 / Yusuke Ando (@yando)

Page 3: 20120507 zendform

agenda

Form Basics

Form

Element

Validate

Page 4: 20120507 zendform

Formの処理

Webアプリに頻出する

扱う必要があるタグの種類が豊富

様々なバリデーションも要求される

JavaScriptとの連携も求められる

Page 5: 20120507 zendform

独自実装は危険ビューが大量のifやforeachであふれる

基本的な書式チェックでのバグリスク

フォームの仕様は膨らみやすい

ex) 複数選択ドロップダウン  初期値のフィルイン 「ここから選択してください」

Page 6: 20120507 zendform

ライブラリに任せるPEAR HTML_QuickForm2

ZendFramework Zend_Form

ZendFramework2 Zend\Form\Form

symfony 1 sfForm

Symfony2 Symfony\Component\Form

FuelPHP Fuel\Core\Form

CakePHP FormHelper

ライブラリによってバリデーションなどに違い

Page 7: 20120507 zendform

Zend_Form

Page 8: 20120507 zendform

Zend_Form

フォーム全体を担当するZend_Form

各要素はZend_Form_Element

検証はZend_Validate

整形などはZend_Form_Decorator

Page 9: 20120507 zendform

基本的な流れZend_Formのオブジェクトを作成

必要な入力要素のElementをセット

ElementにValidateをセット

ビューではFormのオブジェクトをecho

コントローラーではFormのisValidで検査

Page 10: 20120507 zendform

とりあえずの例

Page 11: 20120507 zendform

実行結果

HTMLタグがオブジェクトから自動生成される(エラーメッセージや、タグのカスタマイズも可能)

Page 12: 20120507 zendform

Element超豊富ButtonCaptchaCheckboxFileHiddenHashImage

MultiCheckbox

MultiselectPasswordRadioResetSelectSubmitText

Textarea

Page 13: 20120507 zendform

この書き方はマズイ

Page 14: 20120507 zendform

サブクラス作成

Zend_Formのサブクラスを作成

オプション設定やElementの生成はinit

再利用性アップ

ユニットテストできるようになる!

Page 15: 20120507 zendform

サブクラス化

Page 16: 20120507 zendform

Validateby splorp

Page 17: 20120507 zendform

バリデーション

Zend_Validateのオブジェクトを生成

各ElementにaddValidator()する

isValid()にデータを渡して検証

検証済のデータはgetValues()で取得

Page 18: 20120507 zendform

フォームへの設定

Page 19: 20120507 zendform

検証の実行

Page 20: 20120507 zendform

実行結果

Page 21: 20120507 zendform

Validatorバリ豊富AlnumAlphaBarcodeBetweenCallbackCc

CreditCardDate

DB_NoRecordExistDB_RecordExist

DigitsEmailAddress

FileFloat

GreaterThanHex

HostnameIbanIdenticalInArrayIntIpIsbn

LessThanNotEmptyPostCodeRegex

StringLength

Page 22: 20120507 zendform

Validateの自作

Zend_Validate_Interfaceをimplementsしたクラスを作成

isValidとgetMessagesを定義

isValid内で任意のロジックで判定

通常と同じくElementへaddValidator

Page 23: 20120507 zendform

Validatorを自作

Page 24: 20120507 zendform

Validatorを設定

Page 25: 20120507 zendform

実行結果

Page 26: 20120507 zendform

Decoratortwokingsconfections

Page 27: 20120507 zendform

フォームの整形

フォーム全体をrenderした時

要素をrenderした時

自動で様々なタグ付けを行なっている

拡張したり差し替えも可能

Page 28: 20120507 zendform

要素を直接表示

フォームオブジェクト->要素名を参照

標準では HtmlTag Label Errorsなどが設定済み

拡張したり差し替えも可能

エラーはgetErrorsで取得する

Page 29: 20120507 zendform

Decoratorを解除

Page 30: 20120507 zendform

実行結果

後は自由にマークアップを記述すれば良い

Page 31: 20120507 zendform

まとめフォームにはZend_Formを使おう

Zend_Formのサブクラスを作る

Zend_Form_Elementで要素を設定

検証はZend_Validate

ビューでは状況に応じて表示

Page 32: 20120507 zendform

サンプル?

https://github.com/yandod/php-form-sample