大家好(请原谅我的英语)。
我想做一个应用程序,它需要允许用户必须在表格上填写他们的个人数据、他们的孩子、孙子和曾孙(一个小家谱)。
class Person
{
/**
* @var int
*
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @var string
*
* @ORM\Column(type="string")
*/
private $firstname;
/**
* @var string
*
* @ORM\Column(type="string")
*/
private $lastname;
/**
* @var \DateTime
*
* @ORM\Column(type="datetime")
*/
private $dateOfBirth;
/**
* @var Person
*
* @ORM\ManyToMany(targetEntity="Person")
*/
private $children;
public function __construct()
{
$this->children = new ArrayCollection();
}
}
}
在 PersonType 类中,我执行以下操作:
class PersonType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('firstname');
$builder->add('lastname');
$builder->add('dateOfBirth');
$builder->add('children', 'collection', array(
'type' => new PersonType(),
'allow_add' => true,
'by_reference' => false,)
);
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Anything\YourBundle\Entity\Person'
));
}
/**
* @return string
*/
public function getName()
{
return 'person';
}
}
这样,我在控制器中使用 PersonType 如下:
public function newAction()
{
$entity = new Person();
$form = $this->createForm(new PersonType(), $entity, array(
'action' => $this->generateUrl('person_create'),
'method' => 'POST',
));
return array(
'entity' => $entity,
'form' => $form->createView(),
);
}
但是问题是当我请求这个动作的url,并且这个动作的视图必须被渲染时,出现了一个问题,因为没有给出响应,因为处于无限循环中(我认为是这个原因) . 我想知道这是否可以使用 Symfony 表单来完成,或者我是否必须查看其他替代方案。如果这是可能的,我怎么能做到这一点,我怎么能限制表单只呈现我需要的四个级别(我、我的孩子、我的孙子和我的曾孙)?
我希望问题已被理解。
提前致谢。