2010-12-24 16 views
1

Ich finde, dass, selbst wenn ich nur ein Element wieWie kann ich überprüfen, ob Zend_Form_Elements keine Dekorateure hat gesetzt

erklären
$this->addElement('textarea', 'txt1'); 

finde ich, dass es bereits gesetzt Dekorateure

Zend_Debug::dump($this->getElement('txt1')->getDecorators()); 

http://pastebin.com/7Y24g62w

hat

Ich möchte testen, dass ich keine Dekoratoren gesetzt habe, die setDecorators() verwenden oder etwas wie

verwenden 10

Wenn ich keine Dekoratoren gesetzt habe, dann setze Standard-Dekoratoren, wie kann ich das tun. Ich möchte Standard-Dekoratoren pro Element Basis anwenden, nicht mit Zend_Form#setDisableLoadDefaultDecoraotrs()

+0

Wenn Sie selbst keine Dekoratoren zuweisen, werden die Standardeinstellungen geladen. Möchten Sie testen, ob die Standard-Dekoratoren geladen sind, ob Sie selbst einige Dekoratoren geladen haben oder ob der komplette Dekorator-Stapel leer ist? –

+0

Ich möchte testen, dass ich keine Dekoratoren explizit gesetzt habe, also denke ich, dass es sein wird, ob Standardwerte geladen werden oder sie leer sind –

Antwort

1

Es gibt zwei Optionen, je nachdem, wie genau Sie sicher sein wollen, dass ein Dekorator nicht geändert wurde.

Decorator ohne Option

Wenn Sie wollen nur wissen, ob alle Standarddekorator gesetzt sind, ohne jedes Dekorateur über die Möglichkeiten zu denken, können Sie diese Option verwenden. Natürlich können Sie die Optionen eines Standard-Dekorators ändern und diese Methode wird dies nicht erkennen (aber es ist schneller als eine umfangreiche Prüfung). Leider sind die Standard-Dekoratoren fest in Zend_Form_Element um Zend_Form_Element::loadDefaultDecorators() codiert, so dass Sie diese Liste kopieren müssen. Wenn die Kettenänderung in Zukunft veröffentlicht wird, müssen Sie Ihren Code ändern.

<?php 
$default = array(
    'Zend_Form_Decorator_ViewHelper', 
    'Zend_Form_Decorator_Errors', 
    'Zend_Form_Decorator_Description', 
    'Zend_Form_Decorator_HtmlTag', 
    'Zend_Form_Decorator_Label', 
); 
$decorators = array_keys($element->getDecorators()); 
if ($decorators === $default) { 
    // They are the same 
} 

prüfen Dekorateure mit allen Optionen

Hier erstellen Sie eine Kopie Ihres Elements und an dieser Kopie neu laden Sie alle Standarddekorator. Sie werden wieder instanziiert, so dass es ein wenig mehr Ressourcen benötigt, aber alle Optionen der Dekoratoren werden ebenfalls überprüft.

$clone = clone $element; 
$clone->clearDecorators() 
     ->setDisableLoadDefaultDecorators(false) 
     ->loadDefaultDecorators(); 
if ($clone === $element) { 
    // They are the same 
} 
Verwandte Themen