Переменное количество полей в форме с использованием Zend_Form в Zend Framework

#zend-framework #zend-form #zend-form-sub-form

#zend-framework #zend-форма #zend-форма-подформа

Вопрос:

У меня есть таблица базы данных, и в первой из них определена связанная таблица «site», а во второй можно добавить ряд значений, варьирующихся от одного до многих, которые указывают обратно на «site». Пользователь может открыть поле «сайт» в форме со связанными данными, которые затем отображаются в полях, чтобы пользователь мог редактировать значения.

например, «Сайт один» имеет одно связанное поле.

«Сайт два» содержит три связанных поля.

«Сайт три» содержит два связанных поля. И т.д.

Если бы я запускал ее вручную, я бы просто прочитал данные и создал дополнительные поля, но я создаю ее с помощью Zend_Form, который, похоже, хочет знать количество полей заранее. Я использую модель из каталога models с _form_xxx.phtml в каталоге scripts (частично?).

Я новичок в Zend и немного нащупываю свой путь, так есть ли способ в Zend_Form сделать это, поскольку в противном случае мне, похоже, пришлось бы переписывать php и phtml?

Можно ли использовать вспомогательные формы Zend_Form_SubForm?

Поскольку Zend является гибким, я предполагаю, что в худшем случае я могу написать компонент простым ванильным способом, но я хотел бы использовать инструменты в рамках, если это возможно.

Ответ №1:

Что заставляет вас думать, что Zend_Form должна быть статической? Вы можете динамически создавать поля внутри своей формы во время выполнения по своему усмотрению. Просто поместите логику, которая добавляет элементы вашей динамической формы в конструктор вашего класса form (который расширяет Zend_Form).

ie.

 class YourSplendidForm extends Zend_Form
{
    public function __construct($options = null, $yourParams)
    {
        parent::__construct($options);

        $this->setName('your_form_name');
        $this->setAction('/your/form/action/');

        // Add your fields here using addElement - or create a subform and add fields to that one and use addSubForm to add the subform


    }
}
  

Затем просто передайте экземпляр формы в ваше представление (с контроллера) и обработайте его по мере необходимости (либо с помощью простого <?php echo $this->form; ?> , либо пользовательского рендеринга по своему усмотрению.