Les décorateurs sont une façon d'envelopper vos éléments de formulaire.
Dans Zend/form.php vous pouvez voir la configuration par défaut:
/**
* Load the default decorators
*
* @return void
*/
public function loadDefaultDecorators()
{
if ($this->loadDefaultDecoratorsIsDisabled()) {
return $this;
}
$decorators = $this->getDecorators();
if (empty($decorators)) {
$this->addDecorator('FormElements')
->addDecorator('HtmlTag', array('tag' => 'dl', 'class' => 'zend_form'))
->addDecorator('Form');
}
return $this;
}
plus Zend/FormElements.php utilise ses propres décorateurs:
/**
* Load default decorators
*
* @return Zend_Form_Element
*/
public function loadDefaultDecorators()
{
if ($this->loadDefaultDecoratorsIsDisabled()) {
return $this;
}
$decorators = $this->getDecorators();
if (empty($decorators)) {
$this->addDecorator('ViewHelper')
->addDecorator('Errors')
->addDecorator('Description', array('tag' => 'p', 'class' => 'description'))
->addDecorator('HtmlTag', array('tag' => 'dd',
'id' => $this->getName() . '-element'))
->addDecorator('Label', array('tag' => 'dt'));
}
return $this;
}
Vous pouvez remplacer les décorateurs par défaut pour chaque élément ou pour l'ensemble du formulaire:
$element->setDecorators(array(
'ViewHelper',
'Description',
'Errors',
array(array('elementDiv' => 'HtmlTag'), array('tag' => 'div')),
array(array('td' => 'HtmlTag'), array('tag' => 'td')),
array('Label', array('tag' => 'td')),
));
Il existe un podcast très simple expliquant comment décorateurs travaillent:
http://feeds.feedburner.com/ZendScreencastsVideoTutorialsAboutTheZendPhpFrameworkForiPhone
Regardez la vidéo intitulée: Zend_Form Décorateurs Explained
merci beaucoup, mais ma question est pourquoi et non how.I dire que je ne sais pas pourquoi doivent être des balises dd ajouté par zend_form - soo je demande si existe une raison spéciale pour cela – Yosef
Il est juste un moteur de recherche et un lecteur d'écran amical présentation du formulaire. – jantimon
Principalement c'est parce qu'il est rendu correctement même sans styles. En outre, il a une certaine sémantique. dt (terme) - label & dd (définition) - élément. Peut être lu "nom d'utilisateur est cet élément" :) Je sais que ce serait mieux dans l'autre sens, mais ça aurait l'air bizarre;) –