Zend Framework / Form Element рендерит как текстовое поле, а не как выпадающий список - PullRequest
0 голосов
/ 23 августа 2011

У меня есть следующее в файле config.ini: (Zend_Form_Element)

site_status.name = "site_status"
site_status.type = "select"
site_status.label = "Status"
site_status.options.multiOptions.active.key = "Active"
site_status.options.multiOptions.active.value = "Active"
site_status.options.multiOptions.active.key = "Inactive"
site_status.options.multiOptions.active.value = "Inactive"

Как вы можете видеть, это должен быть выпадающий список (выбрать), однако он отображается как стандартныйтекстовое окно.Что я делаю не так?

-> Edit

Вместо того, чтобы связывать элементы с формой, я пытаюсь связать их с базой данных: в моем коде это будет выглядеть примерно так:

[{tablename}] // the table name would represent a section in the ini
{column}.name = "{column_name/form_field_id}";
{column}.type = "{form_element_type}"
{column}.label = "{form_element_label}"
...

Оттуда я бы извлек таблицы базы данных, для которых форма будет представлять данные (одну или несколько таблиц по необходимости).Поскольку обоснование этого подхода заключается в том, что (в будущем) я хочу определить (либо ini, либо каким-либо другим способом хранения) файл конфигурации, который будет представлять собой список полей / элементов, принадлежащих определенной форме (что тип, не являющийся программистом, может легко редактироваться), что «универсальный» класс формы будет читать, извлекать информацию об элементе и создавать форму на лету.

Однако я понимаю, что это создает другую проблему, котораяЯ еще не разобрался, и вот как использовать поиск таблиц для выбранных элементов (без кодирования поиска в базе данных поиска в форме, чтобы не пользователь мог просто определить его без какого-либо программирования, просто настройки,но это совсем другая тема, не являющаяся частью моего вопроса здесь (и я думаю, что у меня есть жизнеспособные идеи / решения этой части проблемы в любом случае) - дополнительные записи конфигурации и общая процедура в значительной степени.

Я надеюсь, что это проясняет мой мыслительный процесс и причину, почему я делаю это так, как я в примере выше.

1 Ответ

1 голос
/ 26 августа 2011

Я еще не играл с использованием Zend_Config для создания экземпляра Zend_Form.

Но просмотр кода показывает, что Zend_Form::addElement() напрямую не принимает экземпляр Zend_Config в качестве параметра. Скорее всего, вам нужно передать экземпляр Zend_Config в форму constructor . Также кажется, что формат конфигурации должен быть немного глубже, чтобы сопоставить ключи конфигурации с setXXX() вызовами.

В path/to/config/myForm.ini:

[myForm]

myForm.elements.site_status.name = "site_status"
myForm.elements.site_status.type = "select"
myForm.elements.site_status.label = "Status"
myForm.elements.site_status.options.multiOptions.active.key = "Active"
myForm.elements.site_status.options.multiOptions.active.value = "Active"
myForm.elements.site_status.options.multiOptions.inactive.key = "Inactive"
myForm.elements.site_status.options.multiOptions.inactive.value = "Inactive"

Затем создаем экземпляр:

$formConfig = new Zend_Config_Ini('path/to/config/myForm.ini', 'myForm');
$form = new Zend_Form($formConfig);

Не проверено, но, глядя на этот пример:

Использование Zend_Form с Zend_Config - Эндрю Ваянис

такое ощущение, что должно идти что-то похожее на вышеприведенное.

Обновление

С учетом комментариев / отзывов @Aaron, еще два подхода.

  1. Мы можем расширить Zend_Form, реализовав метод, называемый чем-то вроде addElementByConfig, в котором мы передадим неглубокий экземпляр Zend_Config, который описывает сам элемент. Фактически, мы могли бы даже просто переопределить addElement(), используя рекурсивный подход: если первый параметр является экземпляром Zend_Config, то вызовите addElement(), используя данные компонента.

  2. Если атомарность и возможность повторного использования являются основными преимуществами, которые мы ищем при использовании Zend_Config для описания элемента, то, возможно, мы просто создадим пользовательский элемент, расширяющий Zend_Form_Element. Тогда мы могли бы использовать эти элементы в любых формах, которые пожелаем.

...