Symfony 2.8到3.4:简单的实体ID数组不保存

时间:2018-04-24 10:53:16

标签: php symfony symfony-forms

我正在将应用从Symfony 2.8更新为3.4。

我曾经存储过发送AJAX请求的实体集合(不使用Twig的form_xxx助手)

这是典型的有效载荷:

my_healthbundle_anamnesistype[habits][]: 5
my_healthbundle_anamnesistype[diseases][]: 9
my_healthbundle_anamnesistype[diseases][]: 10

这些对AnamnesisType表单构建器没有特殊处理,没有ChoiceType或EntityType,只是:

$builder->add('habits')
        ->add('allergies')
        ->add('interventions')
        ->add('diseases')

所有这些实体都非常简单,只是一个ID和一个名字字段。

这些中的每一个都映射在Anamnesis实体中:

/**
* @ORM\ManyToMany(targetEntity="Habits")
*/
protected $habits;

控制器代码是:

$editForm = $this->createForm(new AnamnesisType(), $entity);
$request = $this->getRequest();
$editForm->bind($request);
if ($editForm->isValid()) {
   /// WIN! 

所有这一切都像2.8中的魅力。正如您所看到的,这非常简单直接。表单构建器没有引用任何实体类,选择类型,实体类型,什么都没有。通过发送上述有效载荷并呼叫->bind()所有"习惯"在一个" Anamnesis"被替换了。

更新已弃用的内容并遵循所有建议(getRequest()成为对request_stack的调用后,bind()成为handleRequest(),创建的表单已从" {{更改1}}"到" new AnamnesisType"等),AnamnesisType::class方法返回false,我在调用{{{{{{ 1}}

我在这里错过了一步吗?将请求中的集合的方式保存为表单是否有变化?任何帮助表示赞赏,这是最后一个最终升级到3.4然后再升级到4.0的拦截器。

1 个答案:

答案 0 :(得分:0)

看起来你错过了if条件中的$editForm->isSubmitted()调用。我希望您的更新代码看起来像这样:

$editForm = $this->createForm(new AnamnesisType(), $entity);
$request = $this->getRequest();

$editForm->handleRequest($request);
if ($editForm->isSubmitted() && $editForm->isValid()) {
    ...
}