Php 符号形式的多个对象

Php 符号形式的多个对象,php,forms,symfony,doctrine-orm,Php,Forms,Symfony,Doctrine Orm,我正在尝试构建一个表单,请求您当前的工作和以前的工作,对象如下所示 class Employment { private $id; private $employerName; private $jobTitle; //this is a relationship to the class below private $address; private $phone; } class Address { private $city;

我正在尝试构建一个表单,请求您当前的工作和以前的工作,对象如下所示

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')
    )
地址位于就业对象内

我可以建立一个这样的形式

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个表单中?我不想创建另一个表单,我需要它处于相同的表单中。我曾考虑过创建一个家长,但我需要附加该原则,以使其发挥作用


有什么想法吗?

根据您对一个表单的评论,我认为您可能对这个问题想得有点过头了。您只需要使用一个数组将两个就业对象传递给一个表单

$data = array(
    'current'  => new Employment(),
    'previous' => new Employment(),
);
$builder = $this->createFormBuilder($data);
$builder
    ->add('current',  new EmploymentFormType())
    ->add('previous', new EmploymentFormType())
;
答案假设您已经定义了适合重用的EmploymentFormType


根据您对一个表单的评论,我认为您可能对这个问题考虑过多了。您只需要使用一个数组将两个就业对象传递给一个表单

$data = array(
    'current'  => new Employment(),
    'previous' => new Employment(),
);
$builder = $this->createFormBuilder($data);
$builder
    ->add('current',  new EmploymentFormType())
    ->add('previous', new EmploymentFormType())
;
答案假设您已经定义了适合重用的EmploymentFormType


根据您对一个表单的评论,我认为您可能对这个问题考虑过多了。您只需要使用一个数组将两个就业对象传递给一个表单

$data = array(
    'current'  => new Employment(),
    'previous' => new Employment(),
);
$builder = $this->createFormBuilder($data);
$builder
    ->add('current',  new EmploymentFormType())
    ->add('previous', new EmploymentFormType())
;
答案假设您已经定义了适合重用的EmploymentFormType


根据您对一个表单的评论,我认为您可能对这个问题考虑过多了。您只需要使用一个数组将两个就业对象传递给一个表单

$data = array(
    'current'  => new Employment(),
    'previous' => new Employment(),
);
$builder = $this->createFormBuilder($data);
$builder
    ->add('current',  new EmploymentFormType())
    ->add('previous', new EmploymentFormType())
;
答案假设您已经定义了适合重用的EmploymentFormType


通过将数据放入这样一个新的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';
    }

}
这种情况与大多数情况不同,它更具动态性,您实际上是在重复表单。在这种情况下,调用相同的对象,但标签不同,因此可以接受两种类型。Cerad很接近他的答案,但由于某种原因,当我试图按照他的建议将其组合在一起时,我遇到了错误。当我遇到一个答案时,我找到了解决问题的办法。它仍然有点不对劲,但在Symfony错误的指导下稍微调整一下,我就能够让它工作了。使用这种格式,我可以像这样在控制器中构建

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

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

希望这对其他人有所帮助,因为我没有意识到表单类型可以作为类型输入。你知道的越多

通过将数据放入这样一个新的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';
    }

}
这种情况与大多数情况不同,它更具动态性,您实际上是在重复表单。在这种情况下,调用相同的对象,但标签不同,因此可以接受两种类型。Cerad很接近他的答案,但由于某种原因,当我试图按照他的建议将其组合在一起时,我遇到了错误。当我遇到一个答案时,我找到了解决问题的办法。它仍然有点不对劲,但在Symfony错误的指导下稍微调整一下,我就能够让它工作了。使用这种格式,我可以像这样在控制器中构建

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

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

希望这对其他人有所帮助,因为我没有意识到表单类型可以作为类型输入。你知道的越多

通过将数据放入这样一个新的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';
    }

}
这种情况与大多数情况不同,它更具动态性,您实际上是在重复表单。在这种情况下,调用相同的对象,但标签不同,因此可以接受两种类型。Cerad很接近他的答案,但由于某种原因,当我试图按照他的建议将其组合在一起时,我遇到了错误。当我遇到一个答案时,我找到了解决问题的办法。它仍然有点不对劲,但在Symfony错误的指导下稍微调整一下,我就能够让它工作了。使用这种格式,我可以像这样在控制器中构建

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

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

希望这对其他人有所帮助,因为我没有意识到表单类型可以作为类型输入。你知道的越多

通过将数据放入这样一个新的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';
    }

}
这种情况与大多数情况不同,它更具动态性,您实际上是在重复表单。在这种情况下,调用相同的对象,但标签不同,因此可以接受两种类型。Cerad很接近他的答案,但由于某种原因,当我试图按照他的建议将其组合在一起时,我遇到了错误。当我遇到一个答案时,我找到了解决问题的办法。它仍然有点不对劲,但在Symfony错误的指导下稍微调整一下,我就能够让它工作了。使用这种格式,我可以像这样在控制器中构建

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

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


希望这对其他人有所帮助,因为我没有意识到表单类型可以作为类型输入。你知道的越多

表单集合无法帮助您实现这一点?@ceadreak否,集合是指您在父项中有多个项,这是动态的。如果你看到一个明显的方式来利用这种情况下的集合,请让我知道。也许我解释得不够好。解释一下你所说的一种形式是什么意思?一个HTML表单?还是一张Symfony 2表格?如果晚一点,为什么?我不确定这是不是正确的方式。但是你可以在与地址实体相关的工作中创建两个字段,分别为address1和address2。@Cerad是后者,原因是形式简单,我从来都不相信为自己轻松地做一些事情。它总是关于用户体验。我认为唯一的方法是让一位家长参与进来。表单集合无法帮助您实现这一点?@ceadreak否,集合是指您在一位家长中有多个项目,这是动态的。如果你看到一个明显的方式来利用这种情况下的集合,请让我知道。也许我解释得不够好。解释一下你所说的一种形式是什么意思?一个HTML表单?还是一张Symfony 2表格?如果是后者,那么w