webfactory / wfdmeta-bundle
这是一个查询 wfd_meta 表并用于 ConfigCache 过期的捆绑包。作为示例代码很有用,请参阅 README 文件。
Requires
- php: >= 8.1
- doctrine/dbal: ^2.13|^3.0
- doctrine/orm: ^2.8|^3.0
- doctrine/persistence: ^2.1|^3.0
- psr/container: ^1.0
- psr/log: ^1|^2|^3
- symfony/config: ^5.4|^6.4|^7.0
- symfony/dependency-injection: ^5.4|^6.4|^7.0
- symfony/filesystem: ^5.4|^6.4|^7.0
- symfony/finder: ^5.4|^6.4|^7.0
- symfony/http-foundation: ^5.4|^6.4|^7.0
- symfony/http-kernel: ^5.4|^6.4|^7.0
- symfony/lock: ^5.4|^6.4|^7.0
- symfony/service-contracts: ^2.5|^3.0
- symfony/twig-bundle: ^5.4|^6.4|^7.0
- twig/twig: ^2.0|^3.0
Requires (Dev)
- phpunit/phpunit: ^9.6.18|^10.5
- symfony/phpunit-bridge: >=7.0
Suggests
- webfactory/http-cache-bundle: If you want to use wfd_meta information to determine Last-Modified information for requests
- dev-master
- 4.2.0
- 4.1.0
- 4.0.4
- 4.0.3
- 4.0.2
- 4.0.1
- 4.0.0
- 3.19.x-dev
- 3.19.4
- 3.19.3
- 3.19.2
- 3.19.1
- 3.19.0
- 3.18.0
- 3.17.1
- 3.17.0
- 3.16.2
- 3.16.1
- 3.16.0
- 3.15.0
- 3.14.0
- 3.13.3
- 3.13.2
- 3.13.1
- 3.13.0
- 3.12.0
- 3.11.0
- 3.10.2
- 3.10.1
- 3.10.0
- 3.9.0
- 3.8.2
- 3.8.1
- 3.8.0
- 3.7.1
- 3.7.0
- 3.6.0
- 3.5.2
- 3.5.1
- 3.5.0
- 3.4.0
- 3.3.1
- 3.3.0
- 3.2.0
- 3.1.3
- 3.1.2
- 3.1.1
- 3.1.0
- 3.0.0
- 2.6.0
- 2.5.1
- 2.5.0
- 2.4.3
- 2.4.2
- 2.4.1
- 2.4.0
- 2.3.3
- 2.3.2
- 2.3.0
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.16
- 2.1.15
- 2.1.14
- 2.1.13
- 2.1.12
- 2.1.11
- 2.1.10
- 2.1.9
- 2.1.8
- 2.1.7
- 2.1.6
- 2.1.5
- 2.1.4
- 2.1.3
- 2.1.2
- 2.1.1
- 2.1.0
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- dev-update-dependencies
- dev-expire-wfdmeta-also-non-debug
- dev-php-cs-fixer/refs/pull/13/merge
This package is auto-updated.
Last update: 2024-09-04 14:20:52 UTC
README
这是什么垃圾?
此捆绑包提供服务和工具,用于处理由 wfDynamic 内容管理系统 跟踪的内容元数据。这些数据保存在名为 wfd_meta
的数据库表中。其中包含创建、最后更新和可能的删除所有管理记录的时间戳。
我们开源它并不是为了直接使用:您可能没有这个捆绑包所需的必要信息。
我们更认为它可能对那些考虑类似解决方案的人有用。特别是使用自定义 ConfigCacheFactory
实现、自定义数据库感知资源和使 Controller
结果可缓存的注解,可能是如何将 Symfony 框架 中的细节钩入以实现更专用功能的有趣示例。
此捆绑包公开的服务和 API
以下部分尝试描述捆绑包的公共 API 部分。其他所有内容都应被视为您不应该干涉的移动部件。
webfactory_wfd_meta.provider
服务
一个 \Webfactory\Bundle\WfdMetaBundle\Provider
的实例,可以用来查询一个或多个通过它们的表名或 wfDynamic 表 ID 标识的表的最后更改(更改或删除)时间戳。也可以用来查询单个数据库行的此信息。
特殊表名 *
表示 "任何更改/表"。
\Webfactory\Bundle\WfdMetaBundle\MetaQuery
类
当知道要跟踪什么更改的代码与执行该信息的代码分布式或不同时,使用 MetaQuery
来分离关注点。更具体地说,一个或多个客户端可以调用 MetaQuery
来添加 Doctrine 实例、实体类、数据库表名或 wfDynamic 表 ID 以跟踪更改。然后,可以将查询传递下去,最终执行它。再次强调,特殊表名 *
表示 "任何表"。
为特定目的创建 MetaQuery
实例作为 DIC 服务;您可以通过继承抽象的 webfactory_wfd_meta.meta_query
服务来做到这一点。或者,调用 webfactory_wfd_meta.meta_query_factory
服务的 create()
方法。
基于 wfd_meta
数据的 HTTP 缓存验证
由于我们希望允许多个 "资源监视器" 的组合 - 例如,一个监视 wfdMeta 数据,一个监视非 wfd-meta-tracked 数据,一个监视例如日期(用于在特定日期重置),因此已弃用 Send304IfNotModified
注解。
此外,我们希望反转依赖方向:缓存捆绑包应能够使用 wfdMetaBundle(以及许多其他捆绑包),但 wfdMetaBundle 不应负责缓存。
这导致了在新的 WebfactoryHttpCacheBundle 中的 "最后修改确定器" 概念。
您可以使用 WfdMetaQueries 快速将已弃用的 Send304IfNotModified 注释转换为 LastModifiedDeterminator。这种转换并不完全遵循 LastModifiedDeterminators 的概念(特别是使用 resetInterval 时;请参阅组件的说明),但如果您急于完成任务,可能不想为此分心。
使用 resetInterval
该注释包含一个名为 resetInterval
的附加设置,默认为 2419200 秒(28天)。
由该注释添加的 Last-Modified
标头将移动到最近的(过去的)该值的倍数。这实际上使得响应看起来永远不会比给定的间隔更旧,并在该间隔过期后(即使没有在 wfd_meta
中记录任何更改),也会使缓存过期(并重新运行控制器一次)。
当您知道您的响应依赖于可以通过 wfd_meta
跟踪的数据时,这非常有用,但它还包括(计算)随时间变化的元素。例如,将 resetInterval
设置为 3600
,以每小时生成一次响应,尽可能使用缓存的响应,但一旦 wfd_meta
跟踪到变化,则立即重新生成响应。
webfactory_wfd_meta.controller.template:templateAction
控制器作为服务
就像 FrameworkBundle:Template-Controller 一样,这可以用于渲染不需要任何额外控制器处理的任意 Twig 模板。但是,除了基本的缓存属性外,还可以添加 wfd_meta
设置和变更跟踪。以下是一个示例
# routing.yml # At /demo, render the MyBundle:Foo:bar.html.twig template. Keep the response in public caches, revalidating it every 10s. Whenever wfd_meta tracks any change, generate a fresh response. demo: path: /demo defaults: _controller: webfactory_wfd_meta.controller.template:templateAction template: 'MyBundle:Foo:bar.html.twig' sharedAge: 10 metaTables: *
\Webfactory\Bundle\WfdMetaBundle\Util\CriticalSection
工具类
此类实现了一个 临界区。当两个进程(在同一台机器/主机上)可能进行干扰操作或尝试执行相同操作时,请使用它。临界区将允许一个进程执行,并阻止其他进程,直到第一个进程完成任务。
自定义 ConfigCacheFactory
实现和专用资源类型
在完整的 Symfony 框架中,几个组件使用 ConfigCache
机制来缓存成本高昂的生成内容。这包括翻译目录以及 URL 路由器和匹配器组件。
此组件添加了两种新的资源类型,\Webfactory\Bundle\WfdMetaBundle\Config\DoctrineEntityClassResource
和 \Webfactory\Bundle\WfdMetaBundle\Config\WfdTableResource
。当您根据数据库内容生成翻译或路由时,将这些资源的实例添加到类(如 MessageCatalogue
(翻译组件)或 RouteCollection
(路由组件))中。
此组件将替换或更确切地说:装饰 config_cache_factory
服务实现。它将包括对新资源类型的检查,并确保在 wfd_meta
中跟踪到相关更改时刷新缓存。这将在 kernel.debug = false
时发生,即在生产模式下!
临界区将用于确保一次只有一个进程尝试重新创建缓存,而其他进程则等待并重用结果。
配置
此组件只有一个配置设置
# config_test.yml webfactory_wfd_meta: always_expire_wfd_meta_resources: true
使用此设置,包含 WfdMetaResource 实例的 ConfigCache 实例(如 Symfony 路由器、翻译器等)将立即过期。
这有助于例如在功能测试中,其中您有数据库支持的路线、翻译或类似内容:您可以更改数据库值,而不再需要考虑 ConfigCaches 或戳 wfd_meta 以使更改生效。
测试
使用以下命令运行测试
vendor/bin/phpunit
致谢、版权和许可
此项目始于 webfactory GmbH,波恩。
版权所有 2015-2023 webfactory GmbH,波恩。代码在 MIT 许可证 下发布。