Конфигурация XML Zend_Form: дочерние узлы и атрибуты не всегда равны?

Набор форм (с использованием Zend_Form), над которым я работал, вызывал у меня некоторые головные боли, пытаясь выяснить, что не так с моей конфигурацией XML, поскольку я продолжал получать неожиданный вывод HTML для определенного элемента INPUT. Предполагалось получить значение по умолчанию, но ничего не появилось.

Похоже, что следующие 2 фрагмента XML не равны при использовании для создания экземпляра Zend_Form:

Фрагмент №1:

<form>
  <elements>
    <test type="hidden">
      <options ignore="true" value="foo"/>
    </test>
  </elements>
</form>

Фрагмент № 2:

<form>
  <elements>
    <test type="hidden">
      <options ignore="true">
        <value>foo</value>
      </options>
    </test>
  </elements>
</form>

Тип элемента не имеет значения, поэтому он не связан со скрытыми полями.

Это ожидается или нет?

2 ответа

Решение

Поскольку здесь было довольно тихо, я заглянул в исходный код и документацию.

В строке 259 Zend_Config_Xml атрибуты объекта SimpleXMLElement преобразуются в строку, в результате чего:

options Object of: SimpleXMLElement 
    @attributes Array [2]   
        label   (string:7) I can't see this because 
        value   (string:21) something happens to this

становление

options (string:21) something happens to this

Итак, я искал документацию только для того, чтобы обнаружить, что "значение" является зарезервированным ключевым словом, когда используется в качестве атрибута в файле XML, который загружается в Zend_Config_Xml:

Пример #2 Использование атрибутов тега в Zend_Config_Xml

"..Zend_Config_Xml также поддерживает два дополнительных способа определения узлов в конфигурации. Оба используют атрибуты. Поскольку атрибуты extends и value являются зарезервированными ключевыми словами (последний - вторым способом использования атрибутов), их нельзя использовать...."

Таким образом, в соответствии с документацией это может быть "ожидаемым". Я не совсем счастлив, что это хорошая идея, учитывая, что "значение" является атрибутом элементов формы.

Не беспокойся об этом. Зарезервированные ключевые слова были перемещены в их собственное пространство имен, а предыдущие атрибуты были удалены. В Zend Framework 2.0 атрибуты без пространств имен будут удалены, чтобы вы могли использовать их снова.

Другие вопросы по тегам