我有一个这样的嵌套实体:
<?php
/**
* @ORM\Entity(repositoryClass="App\Repository\BinderRepository")
*/
class Binder
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*
* @Groups({"export"})
*
* @var int
*/
private $id;
/**
* @ORM\Column(type="string", length=125)
*
* @Groups({"export"})
*
* @var string
*/
private $name;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Binder")
*
* @Groups({"export"})
* @MaxDepth(10)
*
* @var Collection
*/
private $children;
因此,Binder可以包含一个subBinder,它可以包含subsubBinder等。
我在JSON中导出这些实体,在前端修改它们并在JSON中重新发布它们。
我想制作一个能够处理这种提交的表格:
[{"name":"Root 1","id":1,"level":0,"is_open":true,"children":[{"name":"Child 1","id":2,"level":1}]}]
所以,我已经构建了这个表单:
class BinderType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', TextType::class, ['label' => 'binders.name'])
->add('children', CollectionType::class, array(
'entry_type' => BinderType::class,
'allow_add' => true))
->add('create', SubmitType::class, ['label' => 'binders.create'])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Binder::class,
]);
}
}
但不幸的是,它引发了Maximum function nesting level of '256' reached, aborting!
我知道这是因为我正在创建一个包含无限子代的表单,但我只想处理我提交的JSON,它目前是2级(root和subNode)。 我可以将嵌套限制在10个级别,但我只是喜欢我的表单。
我错过了什么?
答案 0 :(得分:0)
添加递归限制。无论如何,你需要增加你的php.ini上的嵌套级别,对于symfony项目,我发现它对于我的许多项目都是一个相当低的水平。
class BinderType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', TextType::class, ['label' => 'binders.name'])
;
if ($options['recursion']>0) {
$builder
->add('children', CollectionType::class, array(
'entry_type' => BinderType::class,
'allow_add' => true,
'entry_options' => ['recursion'=>$options['recursion']-1]
))
;
}
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Binder::class,
'recursion' => 10
]);
}
}