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 :
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
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; } } }
Ca marche mais j'ai quelques questions : (Voir commentaires dans le dernier 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 <?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 }
- 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.
Partager