Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 15-01-2010 10:22:50

Ph
Membre
Date d'inscription: 02-01-2010
Messages: 40

[Zend_Form][1.9.6]Form (et décorateurs) avec Zend_Config_Xml

Bonjour,

Je cherche à customisé ZF afin de créer des projets plus rapidement, de faciliter l'entretien, de posseder une norme ergonomique sur tout un site.
Dans cette optique pour developper plus rapidement et faciliter l'entretien 90% de mes formulaires seront générés par Zend_Config_Xml.
Pour une ergonomie uniformime, un fichier css pour les formulaires, et des décorateurs constants sur tout le site feront l'affaire.

J'ai "codé" quasiment tout ne me reste que les décorateurs. Je vous fais profiter de mes sources (si vous êtes interessé par le projet qui est plus global je peux vous faire profiter du reste.

Je suis ouvert et même demandeur sur tout conseil d'architecture, vaut il mieux étendre les éléments, créer mes décorateurs, faire ca dans mon Form::init()...
Mon choix actuel :
J'ai préféré le Zend_Config car pas besoin d'aller dans le code si l'entretien est fait par un tiers. mis dans le
J'ai préféré le Zend_Config_Xml car je pense faire un fichier .xsd (et le distribuer), pour aider à la création de Zend_Form par Zend_Config_Xml. Si ca existe dites le moi mais je n'ai rien vu.
Zend_Form car ca fait 1 seul fichiers à modifier et pas 1 fichier pour chaque Zend_Form_Element.

Le projet débute excusez le manque de commentaire :

Mon extention de Zend_Form

Code:

        public function init(){
                parent::init();
                $config = new Moo_Config_Xml(APPLICATION_PATH .'/configs/forms.xml', APPLICATION_ENV);

                $this->setConfig($config);
                
                $hash = $this->getElement('moo_hash');
                $hash->setName(__CLASS__);
            }

       public function setOptions(array $options, $addElements = true){
            if (isset($options['elements']) and $addElements) {
                $this->addElements($options['elements']);
                unset($options['elements']);
            }
          return parent::setOptions($options);
        }

Moo_Config_Xml met automatiquement en cache les fichiers de configs !
Comme vous le voyez j'ai modifier l'inclusion d'element par Zend_Config. Par défaut on écrase pas les éléments existants.

Comment utilise t'on cette classe ?
On l'instancie en passant un Zend_Config en argument qui contient les élèments du formulaire. (exemple un formulaire de connexion)

La classe appel un Zend_Config qui sera commun à tout les formulaires. Le voici ci dessous , il modifie l'enctype, les paths, il créé un Zend_Form_Element_Hash, et met en place les décorateurs.

Code:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <production disableTranslator="0">
        <attribs>
            <enctype>multipart/form-data</enctype>
        </attribs>

        <prefixPath>
            <element prefix="Moo_Form_Element" path="Moo/Form/Element/">
            </element>
        </prefixPath>

        <elementPrefixPath>
            <validate prefix="Moo_Validate" path="Moo/Validate/">
            </validate>
        </elementPrefixPath>

        <displayGroupPrefixPath prefix="Moo_Group" path="Moo/Group/">
        </displayGroupPrefixPath>
        <elementFilters>
            <trim>StringTrim</trim>
        </elementFilters>

        <elements>
            <moo_hash type="Hash">
                <timeout>800</timeout>
            </moo_hash>
        </elements>


        <decorators>
            <form>
                <decorator>Form</decorator>
            </form>
            <elements>
                <decorator>FormElements</decorator>
            </elements>
            <table>
                <decorator>HtmlTag</decorator>
                <options>
                        <tag>fieldset</tag>
                 </options>
            </table>
        </decorators>

        <elementDecorators>
            <helper>viewHelper</helper>
            <label>
                <decorator>Label</decorator>
                 <options>
                        <tag>p</tag>
                 </options>
            </label>

           <tableRow>
                <decorator><tr>HtmlTag</tr></decorator>
                 <options>
                        <tag>p</tag>
                 </options>
            </tableRow>

            <tableData>
                <decorator><td>HtmlTag</td></decorator>
                 <options>
                        <tag>div</tag>
                 </options>
            </tableData>
        </elementDecorators>
    </production>
</root>

J'ai un code comme celui ci :

Code:

<fieldset>
<form id="login" enctype="multipart/form-data" action="" method="post">
</form> 

<dt id="Moo_Form-label">&nbsp;</dt> 
<dd id="moo_hash-element"> 
<input type="hidden" name="Moo_Form" value="fc3d2299756e48aeea5c19b7827a060e" id="Moo_Form"></dd> 

<div><p><p id="username-label"><label for="username" class="required">Username</label></p>  
<input type="text" name="username" id="username" value=""></p></div> 

<div><p><p id="password-label"><label for="password" class="optional">Password</label></p>  
<input type="password" name="password" id="password" value=""></p></div> 

<div><p><p id="submit-label"><label for="submit" class="optional">submit</label></p>  
<input type="submit" name="submit" id="submit" value="submit"></p></div>
</fieldset>

Je voudrais cela :

Code:

<form id="login" enctype="multipart/form-data" action="" method="post">
<fieldset>

<input type="hidden" name="Moo_Form" value="fc3d2299756e48aeea5c19b7827a060e" id="Moo_Form"> 

<div>
<p class="label"><label for="username">Username<span  class="required" * </span></label></p> 
<p class="input"><input type="text" name="username" id="username" value=""></p>
</div> 

<div>
<p class="label"><label for="password">Username<span  class="required" * </span></label></p> 
<p class="input"><input type="password" name="password" id="password" value=""></p>
</div> 
 
<div><input type="submit" name="submit" id="submit" value="submit"></div>
</fieldset>
</form>

Je suis sur de pouvoir faire mieux donc je demanderais de n'avoir pas de solutions toutes faites pour le moment, en attendant j'aimerais avoir vos critiques positive/négative sur une tel architecture :
Logiciel...
Syntaxe Html (que pensez vous de cette synthaxe est elle correcte ?)...

Merci d'avance !

Dernière modification par Ph (15-01-2010 10:25:11)

Hors ligne

 

#2 15-01-2010 10:26:22

Ph
Membre
Date d'inscription: 02-01-2010
Messages: 40

Re: [Zend_Form][1.9.6]Form (et décorateurs) avec Zend_Config_Xml

J'oubliais : Je ne cherche pas à réinventer la roue si vous connaissez un projet comme le mien dites le moi.

Dernière modification par Ph (15-01-2010 10:26:39)

Hors ligne

 

#3 15-01-2010 15:17:05

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [Zend_Form][1.9.6]Form (et décorateurs) avec Zend_Config_Xml

Perso, j'ai une classe qui contient des propriétés avec des noms tel que 'standardElementDecorator', 'buttonElementDecorator', 'displaygroupDecorator', etc..
Mon formulaire étend cette classe, et quand je créé mes élements, je pointe sur la bonne propriété.

Mais ca ne colle pas à ton principe d'utiliser les fichiers de configs smile


----
Gruiiik !

Hors ligne

 

#4 15-01-2010 20:05:30

Ph
Membre
Date d'inscription: 02-01-2010
Messages: 40

Re: [Zend_Form][1.9.6]Form (et décorateurs) avec Zend_Config_Xml

Je te remercie pour ton commentaire ! J'espère que d'autres viendront participer et critiquer ce que j'ai fait pour que je puisse y apporter des points d'amélioration.

J'ai fouinné dans le ZF pour trouver les décorateurs par défauts qui sont effacés en fait wink , voila mon nouveau fichier de conf pour les formulaires :

Code:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <production disableTranslator="0">

        <attribs>
            <enctype>multipart/form-data</enctype>
        </attribs>

        <prefixPath>
            <element prefix="Moo_Form_Element" path="Moo/Form/Element/">
            </element>
        </prefixPath>

        <elementPrefixPath>
            <validate prefix="Moo_Validate" path="Moo/Validate/">
            </validate>
        </elementPrefixPath>

        <displayGroupPrefixPath prefix="Moo_Group" path="Moo/Group/">
        </displayGroupPrefixPath>


        <elements>
            <moo_hash type="Hash">
                <timeout>800</timeout>
            </moo_hash>
        </elements>


         <decorators>
            <elements>
                <decorator>FormElements</decorator>
            </elements>
            <form>
                <decorator>Form</decorator>
            </form>
            <fielset>
                <decorator><one>HtmlTag</one></decorator>
                <options>
                        <tag>fieldset</tag>
                </options>
            </fielset>
        </decorators>

        <elementDecorators>
            <helper>viewHelper</helper>
            <errors>
                <decorator>Errors</decorator>
                <options>
                        <tag>p</tag>
                        <class>description</class>
                        <placement>APPEND</placement>
                        <ignoreSubForms>false</ignoreSubForms>
                        <markupElementLabelStart><![CDATA[<b>]]></markupElementLabelStart>
                        <markupElementLabelEnd><![CDATA[</b>]]></markupElementLabelEnd>
                        <markupListStart><![CDATA[<ul class="form-errors">]]></markupListStart>
                        <markupListEnd><![CDATA[</ul>]]></markupListEnd>
                        <markupListItemStart><![CDATA[<il>]]></markupListItemStart>
                        <markupListItemEnd><![CDATA[</li>]]></markupListItemEnd>
                </options>
            </errors>
            <description>
                <decorator>Description</decorator>
                <options>
                    <tag>p</tag>
                    <class>description</class>
                    <placement>APPEND</placement>
                </options>
            </description>
            <data>
                <decorator><one>HtmlTag</one></decorator>
                <options>
                    <tag>p</tag>
                </options>
            </data>
            <label>
                <decorator>Label</decorator>
                <options>
                        <tag >p</tag>
                        <placement>PREPEND</placement>
                </options>
            </label>
            <row>
                <decorator><two>HtmlTag</two></decorator>
                <options>
                    <tag>div</tag>
                </options>
            </row>
        </elementDecorators>
<!--
        <displayGroupDecorators>
            <elements>
                <decorator>FormElements</decorator>
                <requiredSuffix>*</requiredSuffix>
            </elements>
            <fieldset>
                <decorator>Fieldset</decorator>
            </fieldset>
        </displayGroupDecorators>
        -->
    </production>
</root>

Ca donne déja un rendu interessant pour les éléments de type text, password... Le reste est à travailler !
Il y également les balises <fieldset> et <form> qui chient

Code:

<fieldset>
<form id="login" enctype="multipart/form-data" action="" method="post"> 
<dt id="Moo_Form-label">&nbsp;</dt> 
<dd id="moo_hash-element"> <input type="hidden" name="Moo_Form" value="622f0574b32844b7860b254e9880d184" id="Moo_Form"></dd> 
<div>
<p id="username-label"><label for="username" class="required">Username</label></p> 
<p><input type="text" name="username" id="username" value=""></p>
</div> 
<div>
<p id="password-label"><label for="password" class="optional">Password</label></p> 
<p> <input type="password" name="password" id="password" value=""></p></div> 
<div>
<p id="submit-label"><label for="submit" class="optional">submit</label></p> 
<p> <input type="submit" name="submit" id="submit" value="submit"></p>
</div>
</form>
</fieldset>

Dernière modification par Ph (15-01-2010 20:11:24)

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages