Ho provato e, in definitiva, non sono riuscito a raggiungere questo me stesso utilizzando lo stesso approccio. Sembrerebbe che il modo più semplice per farlo sarebbe quello di fare:
...
$submit->setLabel('<span>My Button</span>');
...
Tuttavia, la durata sarà sfuggito. È perfettamente possibile disattivare la fuoriuscita di un decoratore etichetta, tuttavia, l'aggiunta decoratore etichetta rende l'uscita non correttamente, ad esempio:
$decorator = array(
array('ViewHelper'),
array('HtmlTag', array('tag' => 'li')),
array('Label', array('escape' => false))
);
$submit = new Zend_Form_Element_Button('submit');
$submit->setLabel('<span>My Button</span>');
$submit->setDecorators($decorator);
$submit->setAttrib('type', 'submit');
... rende:
<label for="submit" class="optional"><span>My Button</span></label>
<li>
<button name="submit" id="submit" type="submit"><span>My Button</span></button>
</li>
... che , oltre a essere semanticamente scorretto (facilmente risolvibile), sta ancora sfuggendo ai tag span all'interno dell'elemento.
Quindi cosa fai?
Beh, penso che l'approccio migliore (e questo è il mio meta-consiglio quando si tratta di un controllo stretto sul rendering Zend_Form) è quello di utilizzare il decoratore ViewScript.
$submit = new Zend_Form_Element_Button('submit');
$submit->setLabel('My Button');
$submit->setDecorators(array(array('ViewScript', array('viewScript' => '_submitButton.phtml'))));
$submit->setAttrib('type', 'submit');
... poi in _submitButton.phtml definire quanto segue:
<li>
<?= $this->formLabel($this->element->getName(), $this->element->getLabel()); ?>
<button
<?php
$attribs = $this->element->getAttribs();
echo
' name="' . $this->escape($this->element->getName()) . '"' .
' id="' . $this->escape($this->element->getId()) . '"' .
' type="' . $this->escape($attribs['type']) . '"';
?>
<?php
$value = $this->element->getValue();
if(!empty($value))
{
echo ' value="' . $this->escape($this->element->getValue()) . '"';
}
?>
>
<span>
<?= $this->escape($this->element->getLabel()); ?>
</span>
</button>
</li>
Il _submitButton.phtml file di dovrà essere in una directory Visualizza script (si potrebbe essere meglio l'aggiunta di uno specifico per i decoratori di moduli utilizzando $view->addScriptPath('/path/to/my/form/decorators')
).
Questo dovrebbe rendere ciò che stai cercando. Ho appena iniziato a guardare il decoratore di ViewScript a causa di problemi di flessibilità che sto riscontrando nel lavoro.Noterai che il mio script non è così flessibile, e certamente non è in BNF, dati tutti i membri che possono essere popolati sull'elemento oggetto. Detto questo, è un inizio e risolve il tuo problema.
Grazie per la risposta molto dettagliata. Sono a conoscenza del decoratore di ViewScript, ma non sapevo che potesse essere applicato a singoli elementi. – leek
Questo è stato molto utile! – markus