2015-01-06 2 views
0

Я пытаюсь создать форму, которая запрашивает текущую работу и предыдущую работу и объект выглядит следующим образомНесколько объектов в форме Symfony

class Employment { 

    private $id; 
    private $employerName; 
    private $jobTitle; 

    //this is a relationship to the class below 
    private $address; 
    private $phone; 
} 

class Address { 

    private $city; 
    private $state; 
    private $zip; 
} 

адрес находится внутри объекта занятости.

Я могу создать форму, как этот

$builder = $this->createFormBuilder($employment); 
$builder 
    ->add('employerName', 'text') 
    ->add(
     $builder->create('address', 'form', array('by_reference' => ?)) 
      ->add('city', 'text') 
      ->add('state', 'text') 
    ) 

Но это только получает текущий работодатель.

Вопрос

Как настроить его, чтобы положить 2 одного и того же объекта в 1 форме? Я не хочу создавать другую форму, мне нужно, чтобы она была в той же форме. Я думал о создании родителя, но тогда мне нужно приложить Доктрину, чтобы она работала.

Любые мысли?

+0

Форма сбора данных не может помочь вам достичь этого? – ceadreak

+0

@ceadreak no, коллекция - это когда у вас есть несколько элементов, которые находятся внутри родителя, что-то динамическое. Если вы видите очевидный способ использования коллекций для этой ситуации, пожалуйста, дайте мне знать. Возможно, я не объяснил это достаточно хорошо. –

+0

Объясните, что вы подразумеваете под одной формой? Одна форма HTML? Или одну форму Symfony 2? Если позже, то почему? – Cerad

ответ

0

Эта задача была решена путем ввода данных в новый FormType как этот

class EmploymentFormType extends AbstractType { 
    public function buildForm(FormBuilderInterface $builder, array $options) { 

     $builder 
      ->add('current', new CurrentEmploymentFormType(),array(
       'data_class' => 'RLD\AppBundle\Entity\Employment')) 
      ->add('previous', new PreviousEmploymentFormType(),array(
       'data_class' => 'RLD\AppBundle\Entity\Employment')) 
     ; 
    } 

    public function getName() 
    { 
     return 'employment'; 
    } 

} 

Эта ситуация отличается от большинства с embedded form type его более динамичным, и вы действительно повторяющие форму. Если эта ситуация вызывает один и тот же объект, но таблицы различны, поэтому допустимы два типа. Керад был близок с ответом, но по какой-то причине я получал ошибки, пытаясь собрать их вместе, как он предложил. Я нашел решение своей проблемы при ответе на вопрос here. Это было все еще немного, но с небольшой настройкой с помощью ошибок Symfony я смог заставить его работать. В этом формате я был в состоянии построить в контроллере, как это ...

$form = $this->createForm(new EmploymentFormType()); 

return $this->render('RLDAppBundle:Default:test.html.twig', array(
    'form' => $form->createView(), 
)); 

Надеется, что это помогает кому-то еще, потому что я не понимаю, тип формы может быть введен в качестве типа. Чем больше ты знаешь!

2

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

$data = array(
    'current' => new Employment(), 
    'previous' => new Employment(), 
); 
$builder = $this->createFormBuilder($data); 
$builder 
    ->add('current', new EmploymentFormType()) 
    ->add('previous', new EmploymentFormType()) 
; 

Ответ предполагает, что вы определили тип занятостиFormType, подходящий для повторного использования.

http://symfony.com/doc/current/cookbook/form/create_custom_field_type.html

+0

Ошибка, которую я получаю при попытке этого: 'Данные вида формы, как ожидается, будут иметь тип скаляр, массив или экземпляр \ ArrayAccess, но это экземпляр класса RLD \ AppBundle \ Entity \ занятости.Вы можете избежать этой ошибки, установив параметр «data_class» в «RLD \ AppBundle \ Entity \ Employment» или добавив трансформатор вида, который преобразует экземпляр класса RLD \ AppBundle \ Entity \ Employment в скаляр, массив или экземпляр \ ArrayAccess.' Идеи? –

+1

Подумайте о том, что предлагает сообщение об ошибке в вашем методе EmploymentFormType. – Cerad

+0

У меня есть, но я получаю сообщение об ошибке 'Попытка вызова метода« createView »в классе Symfony \ Component \ Form \ FormBuilder' У меня проблемы с стрельбой сейчас. –

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