Symfony Validator 不使用缓存

Posted

技术标签:

【中文标题】Symfony Validator 不使用缓存【英文标题】:Symfony Validator not using cache 【发布时间】:2021-08-07 20:53:54 【问题描述】:

我有 symfony 5.2.3 项目,其中包含一堆缓慢的验证单元测试。我想要缓存验证约束映射。

按照文档https://symfony.com/doc/current/reference/configuration/framework.html#reference-validation-cache 我的validator.yaml 如下(我已经用cli 转储了它,它实际上是这样设置的):

framework:
validation:
    enabled: true
    email_validation_mode: html5
    cache: cache.default_redis_provider

和 cache.yaml:

framework:
cache:
    app: cache.adapter.filesystem
    default_redis_provider: '%env(REDIS_CACHE_URL)%'

但是我的 redis 中没有写入缓存。我深入研究并发现 Symfony\Component\Validator\Mapping\Factory\LazyLoadingMetadataFactory 正在用于此目的。所以我在那里进行了一些调试,发现它正在从 DI 获取 $cache = null。我手动覆盖它

$cache = new RedisAdapter(new Client('redis://redis:6379?database=1'));

而且我的测试运行速度很快,并且缓存被写入和读取。

发生了什么事?这个 validation.cache 选项是否有效?我可以把任何废话放在那里,它甚至不会抛出错误

【问题讨论】:

【参考方案1】:

我看不到你的完整配置,但必须在 '.env' 文件中设置 REDIS_CACHE_URL 的值。

【讨论】:

以上是关于Symfony Validator 不使用缓存的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 5 无法将 EntityManagerInterface 注入验证器

验证 CheckboxType symfony

Symfony2禁用缓存?

基于其他约束的 Symfony 自定义验证器

有没有办法在 Symfony 上自动清除缓存?

Symfony 组件缓存框