Есть два варианта, в зависимости от того, как именно вы хотите убедиться, что декоратор не был изменен.
Декоратор без опции
Если вы просто хотите узнать, установлены ли все декораторы по умолчанию, не думая о параметрах каждого декоратора, вы можете использовать эту опцию. Конечно, вы можете изменить параметры декоратора по умолчанию, и этот метод не распознает это (но это быстрее, чем полная проверка). К сожалению, декораторы по умолчанию жестко закодированы в Zend_Form_Element
в Zend_Form_Element::loadDefaultDecorators()
, поэтому вам необходимо скопировать этот список. Когда в будущих выпусках цепочка изменится, вам нужно изменить свой код.
<?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
}
Проверка декораторов со всеми опциями
Здесь вы создаете копию вашего элемента и при этом перезагружаете все декораторы по умолчанию. Они снова создаются, поэтому требуется немного больше ресурсов, но также проверяются все параметры декораторов.
$clone = clone $element;
$clone->clearDecorators()
->setDisableLoadDefaultDecorators(false)
->loadDefaultDecorators();
if ($clone === $element) {
// They are the same
}