【发布时间】:2018-10-04 14:37:01
【问题描述】:
我正在将一个应用从 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(),“记忆”中的所有“习惯”都被替换了。
在更新已弃用的内容并遵循所有建议后(getRequest() 成为对 request_stack 的调用,bind() 成为 handleRequest(),创建表单从“new AnamnesisType”更改为“AnamnesisType::class”等) ,isValid() 方法返回 false,我在调用 $editForm->getErrors(true, false) 时得到一个空字符串
我在这里错过了一步吗?当实体发生变化时,请求中的集合是否保存到表单中?任何帮助表示赞赏,这是最后升级到 3.4 和 4.0 的最后一个阻止程序。
【问题讨论】:
-
按现在的样子放置代码会更清晰。最重要的是要知道问题出在哪里,并且在更新的代码中。
标签: php symfony symfony-forms