Der Dekorierer „Zend_Form_Decorator_Label“, für die Beschriftung eines Formularelementes, ermöglichte es schon immer, ein umschließendes HTML-Element festzulegen. Dafür wird wiederum der Dekorierer „Zend_Form_Decorator_HtmlTag“ verwendet.

HTML-Code:
<form enctype="application/x-www-form-urlencoded" action="" method="post">
    <dl class="zend_form">
        <dt>
            <label for="foo" class="optional">Foo</label>
        </dt>
        <dd>
            <input type="text" name="foo" id="foo" value="" />
        </dd>
    </dl>
</form>
Es ist auch möglich dem „label“-Element eine Klasse zu übergeben:
PHP-Code:
$form->getElement('foo')->getDecorator('label')->setOption('class''label-class'); 
HTML-Code:
<form enctype="application/x-www-form-urlencoded" action="" method="post">
    <dl class="zend_form">
        <dt>
            <label for="foo" class="label-class optional">Foo</label>
        </dt>
        <dd>
            <input type="text" name="foo" id="foo" value="" />
        </dd>
    </dl>
</form>
Etwas umständlicher wurde es, wenn man dem umschließenden HTML-Element von „label“, also dem „dt“-Element, eine Klasse zuweisen wollte:

PHP-Code:
$form->addElement(
    
'text',
    
'foo',
    array(
        
'label' => 'Foo',
        
'decorators' => array(
            
'ViewHelper',
            
'Errors',
            array(
                
// Dekorierername
                
'Description',
                
// Dekorierer-Optionen
                
array(
                    
'tag'   => 'p',
                    
'class' => 'description',
                ),
            ),
            array(
                
// Dekorierer-Name
                
array(
                    
'element' => 'HtmlTag',
                ),
                
// Dekorierer-Optionen
                
array(
                    
'tag' => 'dd',
                ),
            ),
            array(
                
// Dekorierer-Name
                
array(
                    
'closeDt' => 'HtmlTag',
                ),
                
// Dekorierer-Optionen
                
array(
                    
'tag'       => 'dt',
                    
'closeOnly' => true,
                    
'placement' => 'prepend'
                
),
            ),
            array(
                
// Dekorierer-Name
                
'Label',
                
// Dekorierer-Optionen
                
array(
                    
'class' => 'label-class',
                ),
            ),
            array(
                
// Dekorierer-Name
                
array(
                    
'openDt' => 'HtmlTag',
                ),
                
// Dekorierer-Optionen
                
array(
                    
'tag'      => 'dt',
                    
'openOnly' => true,
                    
'class'    => 'tag-class',
                ),
            ),
        ),
    )
); 
HTML-Code:
<form enctype="application/x-www-form-urlencoded" action="" method="post">
    <dl class="zend_form">
        <dt class="tag-class">
            <label for="foo" class="label-class optional">Foo</label>
        </dt>
        <dd>
            <input type="text" name="foo" id="foo" value="" />
        </dd>
    </dl>
</form>
Mit der Version 1.11.4 des Zend Frameworks erhält der Dekorierer „Zend_Form_Decorator_Label“ eine neue Methode: „setTagClass“.

Mögliche Verwendung 1:
PHP-Code:
$form->addElement(
    
'text',
    
'foo',
    array(
        
'label' => 'Foo',
    )
);

$form->getElement('foo')->getDecorator('label')->setOption('class''label-class')
                                               ->
setTagClass('tag-class'); // Neu! 
Mögliche Verwendung 2:
PHP-Code:
$form->addElement(
    
'text',
    
'bar',
    array(
        
'label'      => 'Bar',
        
'decorators' => array(
            
'ViewHelper',
            
'Errors',
            array(
                
// Dekorierer-Name
                
'Description',
                
// Dekorierer-Optionen
                
array(
                    
'tag'   => 'p',
                    
'class' => 'description',
                ),
            ),
            array(
                
// Dekorierer-Name
                
'HtmlTag',
                
// Dekorierer-Optionen
                
array(
                    
'tag' => 'dd',
                ),
            ),
            array(
                
// Dekorierer-Name
                
'Label',
                
// Dekorierer-Optionen
                
array(
                    
'tag'      => 'dt',
                    
'class'    => 'label-class',
                    
'tagClass' => 'tag-class'// Neu!
                
),
            ),
        ),
    )
); 
Mögliche Verwendung 3:
PHP-Code:
$form->addElement(
    
'text',
    
'baz',
    array(
        
'label' => 'Baz',
    )
);

$form->getElement('baz')->clearDecorators()
                        ->
addDecorator('ViewHelper')
                        ->
addDecorator('Errors')
                        ->
addDecorator(
                            
// Dekorierer-Name
                            
'Description',
                            
// Dekorierer-Optionen
                            
array(
                                
'tag'   => 'p',
                                
'class' => 'description',
                            )
                        )
                        ->
addDecorator(
                            
// Dekorierer-Name
                            
'HtmlTag',
                            
// Dekorierer-Optionen
                            
array(
                                
'tag' => 'dd',
                            )
                        )
                        ->
addDecorator(
                            
// Dekorierer-Name
                            
'Label',
                            
// Dekorierer-Optionen
                            
array(
                                
'tag'      => 'dt',
                                
'class'    => 'label-class',
                                
'tagClass' => 'tag-class'// Neu!
                            
)
                        ); 
HTML-Code:
<form enctype="application/x-www-form-urlencoded" action="" method="post">
    <dl class="zend_form">
        <dt id="foo-label" class="tag-class">
            <label for="foo" class="label-class optional">Foo</label>
        </dt>
        <dd id="foo-element">
            <input type="text" name="foo" id="foo" value="" />
        </dd>
        <dt id="bar-label" class="tag-class">
            <label for="bar" class="label-class optional">Bar</label>
        </dt>
        <dd>
            <input type="text" name="bar" id="bar" value="" />
        </dd>
        <dt id="baz-label" class="tag-class">
            <label for="baz" class="label-class optional">Baz</label>
        </dt>
        <dd>
            <input type="text" name="baz" id="baz" value="" />
        </dd>
    </dl>
</form>
Das Ganze funktioniert natürlich auch mit anderen HTML-Elementen als „dl“, „dt“ und „dd“.

Vorschlag:
Wer noch Ergänzungen hat oder einen Fehler findet, der schreibt diese entweder als Antwort zu diesem Beitrag oder schickt mir eine private Nachricht, ich werde dann die Übersicht erweitern bzw. berichtigen.
Wenn es um Fragen der Einbindung in die eigene Anwendung geht, dann macht bitte einen eigenen Beitrag im entsprechenden Unterforum auf - wir wollen doch das hier nicht unnötig „zumüllen“.
Danke.