2013-09-24 3 views
0

У меня есть 2 объектов ...Symfony2 встроенная форма сбора динамически создавать новые объекты

Контракт (идентификатор, CLIENTNAME, contractCities)
ContractCity (номер, имя)

Договора имеет oneToMany отношения с ContractCities

oneToMany: 
    contractCities: 
    targetEntity: ContractCity 
    mappedBy: contract 
    cascade: [persist, remove] 


ContractCities ManyToOne ассоциации с Договором

manyToOne: 
    contract: 
    targetEntity: Contract 
    inversedBy: contractCities 
    joinColumn: 
     name: contract_id 
     referencedColumnName: id 

При редактировании/создании договора, я хотел бы иметь возможность динамически добавлять новые города (за Minimun требование 3). Я пытался следовать Symfony2 встроенные формы поваренной книги Here

ContractType Форма

->add('contractCities', 'collection', array(
      'type' => new ContractCityType(), 
      'allow_add' => true, 
      'allow_delete' => true, 
      'by_reference' => false 
      )) 

раздел шаблона Twig для отображения городов образуют

<ul class="contractCities" data-prototype="{{ form_widget(form.contractCities.vars.prototype)|e }}"> 
    {% for city in form.contractCities %} 
    <li> 
     {{ form_label(city, loop.index) }} 
     {{ form_widget(city.name, {'attr': {'placeholder' : 'City, State'} }) }} 
    </li> 
    {% endfor %} 
    </ul> 

Некоторые контроллера Код для обеспечить как минимум 3 городских поля

$cityCount = count($contract->getContractCities()); 
    if($cityCount <3) { 
     $needCities = 3 - $cityCount; 

     for($i=0; $i<$needCities; $i++){ 
      $city = new ContractCity(); 
      $city->setContract($contract); 
      $contract->addContractCity($city); 
      } 
    } 





    $form = $this->createForm(new ContractType, $contract); 

    $form->handleRequest($request); 

    if($form->isValid()) { 
     $em = $this->getDoctrine()->getManager(); 
     $em->persist($contract); 


     $em->flush(); 
     $id = $contract->getId(); 
     return $this->redirect($this->generateUrl('Intranet_contract_edit', array('id'=>$id))); 
    } 

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

Мое понимание заключается в том, что Контракт -> AddCity или -> AddContractCity или что-то в этом роде должен быть вызван, но это, похоже, не происходит. Любая идея, что я делаю неправильно?

UPDATE: Когда я отправить форму, я не вижу дополнительные города, показывая в данных POST, во главе с Google ...

Solved: При просмотре исходного кода, используя хром «проверять элемент» в одном из полей прототипа, я заметил, что он показал, что закрывающий тег форм был досрочно отображен (хотя при использовании источника просмотра он выглядел отлично). Я использовал form_start и form_end, но они были в разных div (twitter bootstrap "rows"). Казалось, что тег закрывания формы автоматически отображается непосредственно перед закрывающим тегом div, в котором содержится form_start. Я переместил form_start и form_end так, чтобы они были внешними элементами моего представления (помещая их в один и тот же «контейнер» div), и теперь все работает нормально. Wtf.

Скриншот визуальный помощник: http://imgur.com/hrgOV9T

ответ

0

РЕШИТЬ: При просмотре исходного кода, используя хром «инспектировать элемент» на одном из полей прототипа, я заметил, что он показал формы закрывающий тег было вынесено преждевременно (хотя это отлично смотрятся при использовании источника просмотра). Я использовал form_start и form_end, но они были в разных div (twitter bootstrap "rows").Казалось, что тег закрывания формы автоматически отображается непосредственно перед закрывающим тегом div, в котором содержится form_start. Я переместил form_start и form_end так, чтобы они были внешними элементами моего представления (помещая их в один и тот же «контейнер» div), и теперь все работает нормально. Wtf.

Скриншот визуального помощника: http://imgur.com/hrgOV9T

 Смежные вопросы

  • Нет связанных вопросов^_^