Несколько объектов в форме Symfony

0

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

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
    Коллекция форм не может помочь вам достичь этого?
  • 0
    @ceadreak нет, коллекция - это когда у вас есть несколько элементов в родительском элементе, что-то динамическое. Если вы видите очевидный способ использования коллекций для этой ситуации, пожалуйста, дайте мне знать. Может быть, я не объяснил это достаточно хорошо.
Показать ещё 3 комментария
Теги:
forms
doctrine2

2 ответа

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';
    }

}

Эта ситуация отличается от большинства с встроенным типом формы, более динамичным, и вы действительно повторяете форму. Если эта ситуация вызывает один и тот же объект, но таблицы различны, поэтому допустимы два типа. Керад был близок с ответом, но по какой-то причине я получал ошибки, пытаясь собрать их вместе, как он предложил. Я нашел решение моей проблемы, когда встретив ответ здесь. Это было все еще немного, но с небольшой настройкой с помощью ошибок 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())
;

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

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

  • 0
    Ошибка, которую я получаю, когда пытаюсь это сделать, - The form's view data is expected to be of type scalar, array or an instance of \ArrayAccess, but is an instance of class RLD\AppBundle\Entity\Employment. You can avoid this error by setting the "data_class" option to "RLD\AppBundle\Entity\Employment" or by adding a view transformer that transforms an instance of class RLD\AppBundle\Entity\Employment to scalar, array or an instance of \ArrayAccess. Идеи?
  • 1
    Подумайте, как поступить с сообщением об ошибке в EmploymentFormType.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню