2014-10-20 2 views
1

Я новичок в структуре Zend, и я хотел бы создать форму, которая, за исключением простых полей ввода и выбора, также включает добавление нескольких полей ввода с помощью jquery, например: Multiple input fieldsZend form создает динамически добавленные элементы

, а другой элемент формы, который может принимать несколько пар выбора и ввода, как это: Multiple pairs of select and input

Те будут вставлены в стороне клиента с помощью JQuery. Как я могу реализовать это в Zend, используя элемент формы?

ответ

0

Я сделал то, чего вы пытаетесь достичь в некоторых проектах, и лучший подход, который я нашел, - использовать подформы. Вот некоторые рекомендации, которые могут вам помочь.

Config родительская форма

public function __construct($wine = null) 
{ 
    parent::__construct(); 

    $this->setName('parent-form'); // you can set any name 
    $this->setIsArray(true); 
    $this->_initForm(); 
} 

Добавить столько подчиненной вам нужно внутри формы

protected function _initForm(){ 
    $this->clearSubForms(); 
    $subForm = new Application_Form_Subform(1); 
    $subForm->removeDecorator('Form'); 
    $this->addSubform($subForm,'subform-'.1); 

    $subForm = new Application_Form_Subform(2); 
    $subForm->removeDecorator('Form'); 
    $this->addSubform($subForm,'subform-'.2); 
} 

Config подчиненной

public function __construct($key) { 
    parent::__construct(); 
    $this->setElementsBelongTo("parentform[subform][$key]"); 
    $this->setIsArray(true)->setName("subform")->setAttrib('enctype', 'multipart/form-data'); 

    $this->_initForm(); 
} 

Echo подформ на ваш взгляд, форма

<?php 
    foreach($this->element->getSubforms() as $key => $subForm){ 
     echo $subForm; 
    } 
?> 

Динамически добавлять элементы в вашем представлении формы с помощью Jquery

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

Получение данных на контроллере

if ($request->isPost()) { 

    $data = $request->getPost('parentform'); 

    if ($form->isValid($data)) { 
     foreach ($data['subform'] as $subformInfo) { // loop through each subform input 
      // do something with your data 
     } 
    }