Zend_Formおよびiniファイル

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

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

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

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

Source: https://habr.com/ru/post/J46111/


All Articles