Forms Symfony表单实体类型缓存

Forms Symfony表单实体类型缓存,forms,symfony,caching,entity,query-builder,Forms,Symfony,Caching,Entity,Query Builder,在Symfony v3.2中,我使用了一个带有几个EntityType字段的表单,这些字段有数百个选项,每个选项都是一个相对较大的对象。 由于它们不会经常更改,我想在Symfony中使用一些缓存,加载它们一次,然后继续向EntityType提供它 我已经减少了输入数据的大小,只提取了我需要的字段,然后将其保存到缓存中 当我从缓存中提取数据时-我无法使用选项列表将其直接馈送到EntityType,因为它与ObjectManager分离,并且我得到一个错误(“传递到选项字段的实体必须被管理”)。 要

在Symfony v3.2中,我使用了一个带有几个EntityType字段的表单,这些字段有数百个选项,每个选项都是一个相对较大的对象。 由于它们不会经常更改,我想在Symfony中使用一些缓存,加载它们一次,然后继续向EntityType提供它

我已经减少了输入数据的大小,只提取了我需要的字段,然后将其保存到缓存中

当我从缓存中提取数据时-我无法使用
选项列表将其直接馈送到EntityType,因为它与ObjectManager分离,并且我得到一个错误(“传递到选项字段的实体必须被管理”)。
要重新附加它,我可以使用ObjectManager->merge(),但这意味着对要重新合并并重新附加到管理器的每个项目执行DB调用。这超出了缓存的目的

在这种情况下,最好的方法是什么?只是从表单中完全丢失EntityType(对于速度敏感的页面)并使用ChoiceType(这还包括更改代码许多部分的逻辑)?还有比这更好的吗


到目前为止,我在So或其他地方没有找到任何接近解决方案的方法。

我在分析表单时遇到了同样的问题。我面临的一个问题是,当使用
QueryBuilder
时,添加非常容易,但是
EntityRepository
方法不使用现成的缓存

解决方案其实相当简单。只需在
查询生成器中添加一些缓存设置即可。以下是:

不要忘记将二级缓存添加到实体:

/**
 * @ORM\Entity
 * @ORM\Cache(region="default", usage="NONSTRICT_READ_WRITE")
 */
class User
{

}

二级缓存呢?请参阅,以获取有关此的快速参考,我将查找它。我看到Symfony提到它“目前被标记为实验性的”,但值得一看。如果这可能不起作用,我将需要将最大的EntityType字段转换为ChoiceType,以便能够缓存一个数组,然后使用普通数组数据。@Massimilianarione您是否曾经尝试或管理过以后使用二级缓存做任何事情?当然,我尝试过。这很简单,在我消除了一些未被注意到的错误之后,它就开始工作了,所以显然它并没有那么复杂。但我仍然认为这很简单,只要你知道自己在做什么。我将在未来几天在这里发布我的场景。
/**
 * @ORM\Entity
 * @ORM\Cache(region="default", usage="NONSTRICT_READ_WRITE")
 */
class User
{

}