我正在将应用从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的拦截器。
答案 0 :(得分:0)
看起来你错过了if条件中的$editForm->isSubmitted()
调用。我希望您的更新代码看起来像这样:
$editForm = $this->createForm(new AnamnesisType(), $entity);
$request = $this->getRequest();
$editForm->handleRequest($request);
if ($editForm->isSubmitted() && $editForm->isValid()) {
...
}