Bonjour à tous.

Je débute avec Zend et je galère un peu avec Zend_Form.
J'utilise un plugin décorateur pour metter en forme mes formulaires. J'ai suivi la doc officielle pour le faire.
Ci-dessous mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
 
<?php
 
class My_Decorator_Formulaire extends Zend_Form_Decorator_Abstract
{
    public function buildLabel()
    {
        $element = $this->getElement();
        $label = $element->getLabel();
        if ($translator = $element->getTranslator())
        {
            $label = $translator->translate($label);
        }
        $class = '';
        if ($element->isRequired())
        {
            $class = 'required';
        }
        $label .= ' : ';
        return $element->getView()->formLabel($element->getName(), $label, array('class' =>
            $class));
    }
 
    public function buildInput()
    {
        $element = $this->getElement();
        $helper = $element->helper;
        if ($element->getType() == 'Zend_Form_Element_Submit')
        {
            return $element->getView()->formSubmit($element->getName(), $element->getLabel());
        } elseif($element->getType() == 'Zend_Form_Element_Hidden')
        {
            return $element->getView()->formHidden($element->getName(), $element->getValue());
        }
        else
        {
            return $element->getView()->$helper($element->getName(), $element->getValue(), $element->
                getAttribs(), $element->options);
        }
 
    }
 
    public function buildErrors()
    {
        $element = $this->getElement();
        $messages = $element->getMessages();
        if (empty($messages))
        {
            return '';
        }
        return '<div class="errors">' . $element->getView()->formErrors($messages) .
            '</div>';
    }
 
    public function buildDescription()
    {
        $element = $this->getElement();
        $desc = $element->getDescription();
        if (empty($desc))
        {
            return '';
        }
        return '<div class="description">' . $desc . '</div>';
    }
 
    public function render($content)
    {
        $element = $this->getElement();
        if (!$element instanceof Zend_Form_Element)
        {
            return $content;
        }
        if (null === $element->getView())
        {
            return $content;
        }
        if ($element->getType() == 'Zend_Form_Element_Submit' OR $element->getType() == 'Zend_Form_Element_Hidden')
        {
            $separator = '';
            $placement = $this->getPlacement();
            $label = '';
            $input = $this->buildInput();
            $errors = '';
            $desc = $this->buildDescription();
        } else
        {
            $separator = $this->getSeparator();
            $placement = $this->getPlacement();
            $label = $this->buildLabel();
            $input = $this->buildInput();
            $errors = $this->buildErrors();
            $desc = $this->buildDescription();
        }
 
        $output = '<div class="my-form-element">' . $label . $input . $errors . $desc .
            '</div>';
 
        switch ($placement)
        {
            case (self::PREPEND):
                return $output . $separator . $content;
            case (self::APPEND):
            default:
                return $content . $separator . $output;
        }
    }
}
Ensuite je crée mon formulaire ainsi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 
<?php
 
class Application_Form_Utilisateurs extends Zend_Form
{
 
    public function init()
    {
        /**Comment puis-je déclarer ce une fois pour tous les formulaires (Bootstrap ? ...) **/
		$this->addElementPrefixPath('My_Decorator', 'My/Decorators/', 'decorator');
        $this->setElementDecorators(array('Formulaire'));
		/*************************************************************************/
 
		/************Comment faire ceci dans My_Decorator************/
        $this->setDecorators(array('FormElements', array('HtmlTag', array('tag' =>
            'div', 'class' => 'zend_form')), 'Form'));
		/************Comment faire ceci dans My_Decorator************/
 
        $this->setMethod('post');
        $this->addElementPrefixPath('My_Validate', 'My/Validate/', 'validate');
        //id
        $this->addElement('hidden', 'util_id');
        //pseudo
        $this->addElement('text', 'util_pseudo', array('label' => 'Pseudo', 'required' => true,
            'filters' => array('StringTrim', 'StripTags'), 'validators' => array('Alnum')));
        //mdp
        $this->addElement('password', 'util_mdp', array('label' => 'Mot de passe',
            'required' => true, 'filters' => array('StringTrim')));
        //Confirm mdp
        $this->addElement('password', 'util_mdp_confirm', array('label' =>
            'Confirmer le mot de passe', 'required' => true, 'filters' => array('StringTrim'),
            'validators' => array('EqualMdp')));
        //Email
        $this->addElement('text', 'util_email', array('label' => 'Adresse e-mail',
            'required' => true, 'filters' => array('StringTrim'), 'validators' => array('EmailAddress')));
        //Confirm Email
        $this->addElement('text', 'util_email_confirm', array('label' =>
            "Confirmer l'adresse e-mail", 'required' => true, 'filters' => array('StringTrim'),
            'validators' => array('EqualEmail')));
        //nom
        $this->addElement('text', 'util_nom', array('label' => 'Nom', 'required' => true,
            'filters' => array('StringTrim', 'StripTags')));
        //prenoms
        $this->addElement('text', 'util_prenoms', array('label' => 'Prénoms', 'required' => true,
            'filters' => array('StringTrim', 'StripTags')));
        //profil
        $profils = new Application_Model_Profils();
        foreach ($profils->fetchAll(null, 'prf_lib') as $key => $val)
        {
            $aMultiOptions[$val->prf_id] = $val->prf_lib;
        }
        $this->addElement('select', 'prf_id', array('label' => 'Choisir un profil',
            'filters' => array('StringTrim', 'StripTags'), 'multiOptions' => $aMultiOptions));
    } // End init
 
 
}
Ca marche mais j'ai quelques questions : (Voir commentaires dans le dernier code)
  • Comment déclarer les décorateurs à utiliser une fois pour toute, bootstrap? config.ini?
  • Comment faire inclure dans mon plugin : $this->setDecorators ... (Je ne veux pas utiliser la balise DL qui entoure mon formulaire
  • Mes inputs contiennent des attributs helper="" qui n'est pas valide W3C, comment les enlever?


Merci.