【问题标题】:Symfony 4 store entity in sessionSymfony 4 在会话中存储实体
【发布时间】:2019-02-21 19:13:43
【问题描述】:

我有一个多页表单,它收集一些数据,然后将其保存到多个表中。在 symfony 4 中将实体保存到会话的正确方法是什么?我看到文档here 指出:

在 Doctrine 中,实体对象必须由 EntityManager “管理” 可更新。保存到会话中的实体不在 下一个请求了。这意味着您必须注册这些 如果您想更改实体或使用实体管理器,请再次使用它们 它们作为其他实体之间引用的一部分。你可以实现 通过调用 EntityManager#merge() 来实现。

和

序列化到会话中的实体通常也包含对其他实体的引用。想想用户实体对他的文章、群组、照片或许多其他不同实体的引用。如果您将此对象序列化到会话中,那么您也不想序列化相关实体。这就是为什么你应该在这个对象上调用 EntityManager#detach() 或者在你的实体上实现 __sleep() 魔法方法。

我需要用 symfony 做这个吗?我会怎么做?

也许更好的问题是 - 我应该使用带有会话的实体,还是应该将它们存储在一个类中,最后只将所有类信息加载到实体中?

【问题讨论】:

  • 我不知道您发布的文档,但 symfony 可能不需要?由于与您的原因完全不同的原因,我有一个脚本,它创建一个实体,与关联的实体记录建立适当的链接(通过多对一关系),然后保存到会话变量。它实际上存储了一个实体数组。然后在下一次通过时,我将这些中的每一个都保存在 foreach() 循环中。我没有问题。不确定“官方”答案。如果有帮助,我可以在答案中发布一些代码。

标签: php doctrine session-variables symfony4 entities


【解决方案1】:

根据您的需要,这可以适用。

在会话中存储实体的目的之一是——正如docs- 中提到的那样,是“多步骤表单”。在 Form 中使用会话中的 Entity 可能会导致以下错误:

实体 Your\Entity 必须被管理传递给选择字段。也许将它们保留在实体管理器中?


您可以阅读this SO question 了解此问题。

【讨论】:

  • 你如何回答一个问题而不实际回答它? -1
  • @AriesVII 显然是这样的。如果您有其他要求,请随时回复。
  • 嗯 - 我已经结束了。当时我只是很生气,因为我一直在寻找真正的答案,并在你的答案中发挥了极致。
猜你喜欢
  • 2012-06-16
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 2017-06-21
  • 1970-01-01
相关资源
最近更新 更多