ang3 / doctrine-cache-invalidator-bundle
Doctrine 缓存无效化。
dev-master
2019-07-14 16:47 UTC
Requires
- php: ^7.1.3
- doctrine/orm: ^2.5
- psr/log: ^1.0
- symfony/config: ^4.0
- symfony/dependency-injection: ^4.0
- symfony/expression-language: ^4.0
- symfony/http-kernel: ^4.0
Requires (Dev)
- phpstan/phpstan-doctrine: ^0.10
This package is not auto-updated.
Last update: 2024-09-15 05:44:34 UTC
README
一个用于管理 doctrine 结果缓存无效化的 Symfony 包。
安装
步骤 1: 下载 Bundle
打开命令行,进入项目目录,并执行以下命令以下载此 Bundle 的最新稳定版本
$ composer require ang3/doctrine-cache-invalidator-bundle
此命令要求您已全局安装 Composer,如 Composer 文档中的安装章节所述。
步骤 2: 启用 Bundle
然后,通过将其添加到项目 app/AppKernel.php
文件中注册的 Bundle 列表中来启用此 Bundle。
<?php // app/AppKernel.php // ... class AppKernel extends Kernel { public function registerBundles() { $bundles = array( // ... new Ang3\Bundle\DoctrineCacheInvalidatorBundle\Ang3DoctrineCacheInvalidatorBundle(), ); // ... } // ... }
步骤 3: 配置您的应用程序(可选)
不需要配置,但您可以配置特定的日志记录器。
# app/config/config.yml ang3_doctrine_cache_invalidator: logger: ~ # An optionnal logger ID (Psr/Log/LoggerInterface)
用法
上下文
假设您在 AppBundle\Repository\MyRepository
的仓库类中注册了一个结果缓存 ID。
// src/AppBundle/Repository/MyRepository.php // ... $qb // ... // Get the query ->getQuery() // Register an ID to invalidate results ->setResultCacheId('my_custom_id') // Get the result as you want ->getResult() # Or what ever ; // ...
无效化
无效化过程发生在 "flush" 实体操作期间。在每个实体上,调用解析器以定义要删除的潜在缓存索引。为此,您只需在相关的实体上编写一个注解并对其进行配置。
// src/AppBundle/Entity/EntityA.php // Do not forget the "use" statement use Ang3\DoctrineCacheInvalidatorBundle\Annotation\CacheInvalidation; // ... /** * @CacheInvalidation(id="my_custom_id") */ class EntityA { // ... }
选项
CacheInvalidation 注解有三个参数
id
(必需):要删除的结果缓存 IDparameters
(可选):潜在 ID 参数的关联数组(值由一个 表达式 表示)validation
(可选):一个 表达式,用于验证特定实体
动态 ID 和参数
在动态结果缓存 ID 的情况下,您可以注册类似于 PHP(使用 $
)的变量,但您必须指定 "parameters" 选项下的相关表达式。建议您使用点 .
结束变量名。
// src/AppBundle/Entity/EntityA.php // Do not forget the "use" statement use Ang3\DoctrineCacheInvalidatorBundle\Annotation\CacheInvalidation; // ... /** * @CacheInvalidation(id="my_custom_.$id", parameters={"id":"this.getId()"}) */ class EntityA { // ... }
验证
您还可以在处理过程中将实体提交给验证。您只需指定一个表达式,以便返回一个布尔值。如果表达式返回 TRUE 或等效(可转换),则删除结果缓存 ID。
// src/AppBundle/Entity/EntityA.php // Do not forget the "use" statement use Ang3\DoctrineCacheInvalidatorBundle\Annotation\CacheInvalidation; // ... /** * @CacheInvalidation(id="my_custom_.$id", parameters={"id":"this.getId()"}, validation="eventType == 'update'") */ class EntityA { // ... }
表达式
所有使用的表达式都由组件 symfony/expression-language 进行评估。
在评估每个表达式时,传递以下变量
this
(对象):添加/编辑/删除的实体eventType
(字符串)'insert'、'update' 或 'delete'changeSet
类Ang3\Bundle\DoctrineCacheInvalidatorBundle\Helper\EntityChangeSetHelper
的实例
待办事项
- 使用默认实体管理器以外的实体管理器(在监听器中获取 doctrine 注册表,然后在注解中添加 'entity_manager' 选项并在 flush 操作期间检查实体管理器)!