Как создать экземпляр для Zend-контроллера
У меня есть контроллер с именем класса TestController, который расширяет некоторые Zend_Controller_Action. Теперь я хотел бы использовать создание экземпляра TestController в TestForms (Zend_Form). Я хочу заполнить Zend_Form_Element_Select динамически. Пожалуйста, предложите, как я могу это сделать. Спасибо заранее.
2 ответа
Где вы создаете экземпляр формы - она в контроллере? Вместо того, чтобы форма вызывала действие на контроллере для динамического получения значений, вы должны смотреть на установку значений в форме после ее создания.
Быстрый и грязный способ сделать это - получить значения в контроллере и назначить его элементу с помощью:
$values = $db->query('query');
$element = $form->getElement('dynamicSelect');
$element->setValue($values);
Конечно, запросы БД к таблице в вашем контроллере не совсем лучшая практика... По предложению Филистина, я использую класс конструктора форм для динамического построения форм из моих моделей. У меня есть мапперы для каждой модели, и я передаю маппер классу конструктора форм, чтобы он мог динамически заполнять мои элементы выбора.
Несколько вещей, которые нужно попробовать (не рекомендуется передавать контроллер в форму или создавать его изнутри):
- Используйте модель для доступа к динамическим значениям, которые вы хотите поместить в свой Zend_Form_Element_Select.
- Если форма сложная, создайте класс конструктора форм, чтобы позаботиться о тяжелом поднятии конструкции формы.
- Создавайте настраиваемые элементы формы, расширяясь из Zend_Form_Element_(Radio, Select, и т. Д.), Если вы чувствуете, что вам нужен очень хороший контроль над конструкцией / поведением / внешним видом элемента формы, но хотите иметь возможность использовать этот элемент в другом месте.