Конфигурация 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 атрибуты без пространств имен будут удалены, чтобы вы могли использовать их снова.