Zend_Formおよびiniファイル

Zend Frameworkは多くの側面から吸い上げられ、優れたドキュメントがあります。 しかし、Zend_Formを介したフォームの操作には落とし穴があります。これは、公式ドキュメントでも十分にカバーされていない機能が大量にあるためです。



iniファイルを使用してフォームを構成する方法について説明します。 プログラマーやレイアウト設計者に役立ちます。



Zend Frameworkが何であるかはすでにおおよそわかっていて、そのドキュメントがどこにあるか知っていると思います。 プロジェクトでZend_Formを使用することもできます。



そうでない場合、基本的な概念は次のとおりです。

フォームをテストするには、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:この記事が私だけでなく役に立つ場合は、次の記事で要素、フィルター、バリデーター、およびデコレーターの構成について詳しく説明します。



All Articles