iniファイルを使用してフォームを構成する方法について説明します。 プログラマーやレイアウト設計者に役立ちます。
Zend Frameworkが何であるかはすでにおおよそわかっていて、そのドキュメントがどこにあるか知っていると思います。 プロジェクトでZend_Formを使用することもできます。
そうでない場合、基本的な概念は次のとおりです。
- アイテム 実際には、フォームの形式化されたhtml要素。 標準のものはZend_Form_Element_ *と呼ばれ、Zend_Form_Elementの子孫です。 独自の要素は、標準の要素を展開することで作成されます。 詳細はこちら 。
- デコレータ htmlの生成を担当します。 何らかの理由で、理解するのが最も難しい部分の1つですが、同時に非常に強力で柔軟なツールです。 詳細はこちら 、 こちら 、 こちら 。
- バリデーター 彼らはデータ検証とエラー報告に従事しています。 詳細はこちら 。
- フィルター フォームから受け取ったデータをフィルタリングおよび変更します。 たとえば、ユーザーが「Vasya Pupkin」と入力すると、フィルターが「Vasya Pupkin」に表示されます。 詳細はこちら 。
- 要素のグループ 。 DisplayGroup-要素を視覚的にグループに結合するためのツール。
- 翻訳者 。 複数の言語のサポート。 詳細はこちら 。
フォームをテストするには、2つのファイル
form.php
と
form.ini
が必要です。 1つ目はここにあり、2つ目について説明します。
<?php
require_once 'Zend/Loader.php' ;
Zend_Loader :: registerAutoload ();
$view = new Zend_View ();
$view -> doctype ( Zend_View_Helper_Doctype :: XHTML1_STRICT );
$conf = new Zend_Config_Ini ( 'form.ini' );
$form = new Zend_Form ( $conf );
$form -> setView ( $view );
echo $form ;
Iniファイル構造
ファイルには、<form>タグの属性、グローバル値、要素、要素のデフォルト値などが含まれます。
属性
認識されないキーはすべて、<form>タグの属性として解釈されます。 ただし、
attrs.*
明示的に指定することもできます。
;;;;
;;;; form.ini
;;;;
action = /some/url
; post | get | put | delete
method = post
; "application/x-www-form-urlencoded" | "multipart/form-data"
enctype = "custom-enctype"
; Description
description = "form description"
; Fieldset
legend = "form legend"
; <form name="">
name = "attr name"
; int - SubForm ( )
order = 1
; true | false - -
; ini- (. decorators.*)
disableLoadDefaultDecorators = false
; true | false -
disableTranslator = false
; attribs.* - <form>
attribs.action = /yet/another/url ; action
attribs.my_pretty_cool_attr = value ; <form my_pretty_cool_attr="value"/>
; defaults.* - -.
defaults.myfield = "Default value for my field"
defaults.anotherfield = "Pretty nice value for another field""
クラスパス
; prefixPath -
; :
prefixPath.prefix = Zend_Form_
prefixPath.path = Zend/Form/
; Zend_Form_Decorator_MyDecorator
; Zend/Form/Decorator/MyDecorator.php
; Zend_Form_Element_MyElement Zend/Form/Element/MyElement.php
; , , :
prefixPath.zend.element.prefix = Zend_Form_Element_
prefixPath.zend.element.path = Zend/Form/Element/
prefixPath.zend.decorator.prefix = Zend_Form_Decorator_
prefixPath.zend.decorator.path = Zend/Form/Decorator/
prefixPath.custom.prefix = MyProject_Form_
prefixPath.custom.path = MyProject/Form/
; elementPrefixPath - , elements.*
; ,
; , prefixPath.*
elementPrefixPath.decorator.prefix = Zend_Form_Decorator_
elementPrefixPath.decorator.path = Zend/Form/Decorator/
elementPrefixPath.filter.prefix = Zend_Filter_
elementPrefixPath.filter.path = Zend/Filter/
elementPrefixPath.validate.prefix = Zend_Validate_
elementPrefixPath.validate.path = Zend/Validate/
; displayGroupPrefixPath - prefixPath.*
; defaultDisplayGroupClass - .
; - Zend_Form_DisplayGroup
defaultDisplayGroupClass = Zend_Form_DisplayGroup
デコレータ
; decorators.* - .
; -.
; : FormElements, !
; -:
decorators.elements = FormElements
decorators.tag = HtmlTag
decorators.tag.options.tag = dl
decorators.tag.options.class = zend_form
decorators.form = Form
; displayGroupDecorators.* -
;
; displayGroups.groupName.options.decorators.*
; displayGroupDecorators.*, :
displayGroupDecorators.el = FormElements
displayGroupDecorators.tg = HtmlTag
displayGroupDecorators.tg.options.tag = dl
displayGroupDecorators.fs = Fieldset
displayGroupDecorators.dt = DtDdWrapper
; elementDecorators.* -
; elements.myfield.options.decorators.*
; elementDecorators.*, :
elementDecorators.vh = ViewHelper
elementDecorators.er = Errors
elementDecorators.ht = HtmlTag
elementDecorators.ht.options.tag = dd
elementDecorators.lb = Label
elementDecorators.lb.options.tag = dt
フォーム要素
; elementsBelongTo - -, .
; SubForm's.
; , as is (, <input name="myfield"/>)
; :
elementsBelongTo = wholeFormElements
;
; ( : <input name="wholeFormElements[myfield]"/>
; :
; elements.myfield.options.belongsTo
; elementFilters.* - -
elementFilters.flt1.filter = StringTrim
elementFilters.flt1.options.chatList = " _-"
; ,
; .filter - Zend_Filter_
; elements.* -
; elements.FIELDNAME.type - Zend_Form_Element_
; elements.FIELDNAME.type = Text - Zend_Form_Element_Text
elements.myfield.type = Button
elements.myfield.options.label = "Click me ;-)"
; elements.foobar.name = FIELDNAME - :
elements.a.name = myfield
elements.a.type = Text
elements.a.options.required = true
...
; elements.FIELDNAME.options.* - : , , , ..
アイテムグループ
; displayGroups.* - . - <fieldset/>
displayGroups.foo.name = mygroup
displayGroups.foo.options.legend = "Display Group Visible Title"
displayGroups.foo.options.order = 1
displayGroups.foo.options.description = "Cool fields" ; Description
displayGroups.foo.options.decorators.* ; displayGroupDecorators.*
displayGroups.foo.elements.a = myfield1 ; , elements.myfield1
displayGroups.foo.elements.b = myfield2 ;
そして最後に。 iniファイルにフォームを保存するのは便利で、そのフォーマットはレイアウトとデザイナーで訓練できますが、軟膏にもハエがあります-生産性。 フォームをこのように使用すると、ファイルの読み取り、解析、およびフォームのセットアップでペナルティが発生します。
これを避けるために、iniファイルを使用して作成されたZend_Formオブジェクトをキャッシュします。
PS:この記事が私だけでなく役に立つ場合は、次の記事で要素、フィルター、バリデーター、およびデコレーターの構成について詳しく説明します。