ApiPlatform/Doctrine - 无法使用二级缓存,出现错误"在没有并发区域的情况下无法使用访问策略类型 [3]"



我的环境是:

api平台:v3.0.0
符号:6.1.0
条令\缓存:2.2
学说\形式:2.13.1

我正在尝试设置一个具有READ_WRITE访问权限的二级缓存区域。根据规范,READ_WRITE使用需要使用ConcurrentRegion,因为只要写入或读取缓存,缓存就会被锁定。

我创建了一个用于二级缓存的缓存池:

### config/packages/cache.yaml
framework:
cache:
app: cache.adapter.redis
default_redis_provider: '%env(REDIS_URL)%'
pools:
doctrine.second_level_cache:
adapter: cache.adapter.redis
default_lifetime: 3600

二级缓存配置如下:

### config/packages/doctrine.yaml
doctrine:
orm:
second_level_cache:
enabled: true
region_cache_driver:
type: pool
pool: doctrine.second_level_cache # referenced in cache.yaml
regions:
locked_region:
cache_driver:
type: pool
pool: doctrine.second_level_cache # referenced in cache.yaml
lock_path: '%kernel.cache_dir%/doctrine/orm/lock'

我使用默认原则UserProvider在身份验证时加载用户实体。为了将缓存区域与用户实体一起使用,添加了缓存属性:

### AppEntityUser.php
use DoctrineORMMappingCache;
#[Cache("READ_WRITE", "locked_region")]
class User implements UserInterface, PasswordAuthenticatedUserInterface, EquatableInterface
{

现在,登录(执行POST(后,vendor/domine/orm/lib/doctrine/OM/Cache/DefaultCacheFactory.php(第136行(中会抛出一个InvalidArgumentException,并显示消息如果没有ConcurrentRegion,则无法使用[3]类型的访问策略

条令拒绝使用现有缓存区域,因为它期望ConcurrentRegion(READ_WRITE上需要(,但接收到DefaultRegion。我很确定我的.yaml配置有问题。。。lock_path应该是文件路径吗?即使在使用Redis时也是如此?

谢谢!

错误在于配置-缺少类型属性。

这项工作:

### config/packages/doctrine.yaml
doctrine:
second_level_cache:
enabled: true
regions:
locked_region:
cache_driver:
type: pool
pool: doctrine.second_level_cache
type: filelock # <-- this one was missing
lock_path: '%kernel.cache_dir%/doctrine/orm/lock'

相关内容

最新更新