#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; ?>
, либо пользовательского рендеринга по своему усмотрению.