【问题标题】:Symfony 2.8 to 3.4: Simple array of entity IDs not savingSymfony 2.8 到 3.4:实体 ID 的简单数组不保存
【发布时间】: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


【解决方案1】:

您似乎缺少 if 条件中的 $editForm->isSubmitted() 调用。我希望您更新的代码看起来像这样:

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

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

【讨论】:

  • 不推荐调用 isValid 而没有 isSubmitted,但它仍然适用于 Symfony
  • 谢谢!注意,但我使用的是 3.4 和 $editForm->isValid()false,所以即使使用 isSubmitted 它也永远不会进入 if 条件。我刚刚尝试使用submithandleRequest($request) 切换到submit($request),我至少收到一条错误消息:“错误:此值无效”。但我仍然不知道“错误”是什么。
  • 您使用 WebProfiler-Toolbar 吗?如果是这样,您可以看到验证失败的原因,例如通过转到http://localhost:8000/_profiler(如果您使用内部网络服务器默认设置),然后转到验证选项卡。日志中有任何消息吗?
猜你喜欢
  • 2018-09-29
  • 2018-10-17
  • 2019-02-21
  • 2016-05-12
  • 1970-01-01
  • 2014-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多