Symfony 表单 EntityType 缓存

2024-01-12

在 Symfony v3.2 中,我使用带有多个 EntityType 字段的表单,其中有数百个选项 - 每个选项都是一个相对较大的对象。 因为它们不会经常改变,所以我想在 Symfony 中使用一些缓存,加载它们一次,然后继续为 EntityType 提供数据。

我已经通过仅提取我需要的字段来减少提供给它的数据的大小,然后将其保存到缓存中。

当我从缓存中提取数据时 - 我无法使用choice_list,因为它与 ObjectManager 分离,并且我收到错误(“必须管理传递到选择字段的实体”)。 要重新附加它,我可以使用 ObjectManager->merge(),但这意味着要为每个重新合并并重新附加到管理器的项目调用数据库。这违背了缓存的目的。

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

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


我在分析我的表单时遇到了同样的问题。我面临的问题之一是添加二级缓存 https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/second-level-cache.html使用时非常容易QueryBuilder,但是EntityRepository方法不直接使用该缓存。

解决方案实际上非常简单。只需添加一些缓存设置到您的query_builder。这里有一个Symfony 文档中的示例 https://symfony.com/doc/4.0/reference/forms/types/entity.html#query-builder:

$builder->add('users', EntityType::class, array(
    'class' => User::class,
    'query_builder' => function (EntityRepository $er) {
        return $er->createQueryBuilder('u')

            //add something like this
            ->setCacheable(true)
            ->setCacheMode(Cache::MODE_NORMAL)
            ->setCacheRegion('default')

            ->orderBy('u.username', 'ASC');
    },
    'choice_label' => 'username',
));

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

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

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Symfony 表单 EntityType 缓存 的相关文章

  • Symfony 3.0 - 无法加载资源“。” - 自定义路线加载器

    我正在努力将我的一个项目升级到 SF 3 该项目使用了一些自定义路由加载器 这些加载器之前工作没有问题 现在我得到了FileLoaderLoadException指出resource 无法加载 我看了一下文档 http symfony co
  • 用于电子邮件和文件日志记录的 Symfony2 Monolog 设置

    我想设置 Symfony2 向我发送电子邮件critical错误 但只需记录error级别错误 下面的设置可以做到这一点吗 monolog handlers main type fingers crossed action level er
  • Doctrine ORM 按注释对象字段排序

    所以它很简单 我在某个实体中有以下代码 var ServiceOffer ORM OneToMany targetEntity ServiceOffer mappedBy serviceProvider ORM OrderBy servic
  • 在 Java 中加载和缓存图像的最佳方法是什么?

    我有超过一千个 16 x 16 像素图块图像的大量集合 我在 Java 中制作的游戏需要这些图像 在不耗尽 JVM 可用内存的情况下存储切片的最佳方法是什么 我认为生成 1000 BufferedImages 可能并不明智 保持图像准备就绪
  • Google App Engine - 破坏服务 URL 缓存

    我终于设法让图像在 App Engine 上正确旋转 现在我正在努力绕过缓存的图像 而标准缓存清除技术不起作用 因此 第一次旋转图像时 我得到了一个不同的 URL 并且图像被旋转 第二次旋转它时 我得到相同的 URL 只有在附加 s300
  • Flask:缓存静态文件(.js、.css)

    我真的找不到任何这方面的资源 那么如何将视图 函数的缓存与静态文件 即 css js 分开 我想将静态对象缓存一周 另一方面 我只需要缓存函数 视图几分钟 当我执行以下操作时 from flask ext cache import Cach
  • 如何设置外键id的id #sf2 #doctrine2

    我正在尝试手动为对象设置外键 id 但没有找到如何执行此操作 class Item ORM ManyToOne targetEntity MyBundle Entity ItemType inversedBy itemTypes ORM J
  • 避免 AngularJS 部分视图在 IE 中缓存

    我正在开发一个 ASP NET MVC 应用程序 它也有一些 angularJS 我有一个主页 其中有不同的选项卡 当您单击它们时 它们会加载角度部分视图 主页是这样的 div class widget div div class widg
  • 如何在高速缓存中存储图像

    我对此完全空白 我想从 URL 下载图像 并且必须将其存储在内部 以便下次我不需要连接到网络 而是从缓存中检索它 但我不知道该怎么做 谁能帮我提供一个代码片段 import java io BufferedInputStream impor
  • 每个“容器”类一个 DAO 还是每个表一个 DAO?

    我有一个 容器 类 其中的字段包含在多个数据库表中 并且我使用 DAO 模式来访问数据 问题是 我应该为这个 容器 类创建一个 DAO 还是每个表都有一个 DAO 并合并它们的数据更好 您应该根据应用程序的需求而不是数据库的布局来设计 DA
  • @UniqueConstraint 和 @Column(unique=true) 选项之间的 Doctrine ORM 级别差异

    在数据库级别 使用一个选项与另一个选项来定义时没有区别独特性如下所示 虽然 UniqueConstraint在其文档中读取 它仅在 SchemaTool 模式生成上下文中有意义 两者之间是否存在 ORM 级别差异 我的意思是 当我们运行查询
  • 是否可以共享 Symfony2 安装(一台服务器上的多个网站 [域])

    我想在一个根 服务器 下托管多个基于 Symfony2 的网站 是否可以共享 symfony 自己的文件 供应商等 有人知道教程吗 管理起来困难吗 AFAIK Symfony 安装大约有 600MB 我不想以冗余方式保存它 我看起来确实有可
  • 如何保持长时间运行的NHibernate Session数据一致?

    我在 ASP NET 会话中缓存了 NHibernate 会话 我遇到过一种情况 用户编辑了一个对象 因此它位于 ISession 的第一级缓存中 然后另一个用户编辑了同一个对象 此时 用户 1 仍然可以看到其编辑的原始版本 而用户 2 可
  • 使 Django 1.3.1 中的视图缓存过期

    我正在尝试使模型上的视图级缓存过期post save 这是通过设置的https docs djangoproject com en 1 3 topics cache from olddocs the per view cache https
  • 如何在 Django 测试服务器中防止 HTTP 304

    我在 Django 中有几个项目 并且时不时地在一个和另一个之间交替 它们都有一个 media 路径 由django views static serve 并且他们都有一个 media css base css file 问题是 每当我运行
  • 在应用程序内核中找不到 FOSUserBundle

    我在 Windows 上使用 symfony 并尝试按照官方文档中的描述配置 FOSUserBundle 尝试更新架构时出现此错误 Class FOS UserBundle FOSUserBundle not found in app Ap
  • 我们如何计算这段代码片段中缓存的读取/未命中次数?

    鉴于我目前正在学习的这本教科书中的代码片段 Randal E Bryant David R O Hallaron 计算机系统 程序员的视角 第 3 版 2016 年 Pearson 全球版 因此本书的练习可能是错误的 for i 31 i
  • StackExchange.Redis Get 函数抛出 TimeoutException

    我在用着StackExchange Redis与 C 和StackExchangeRedisCacheClient Get函数抛出以下异常 myCacheClient Database StringGet txtKey Text myCac
  • ASP.NET 中 HTTP 缓存相关标头的有效含义

    我正在 ASP NET 2 0 中开发一个 Web 应用程序 其中涉及通过资源处理程序 ashx 提供图像 我刚刚实现了处理缓存标头和条件 GET 请求 这样我就不必为每个请求提供所有图像 但我不确定我是否完全理解浏览器缓存发生了什么 图像
  • 如何在 Symfony 4 中为测试环境设置数据库

    我对如何在 symfony 4 中为测试环境设置数据库感到困惑 我曾经在配置测试 ymlsymfony 3 及以下版本中的文件 最佳做法是什么 我应该重新创建一个学说 yaml文件输入配置 包 测试 该文档提到如何通过编辑 phpunit

随机推荐