首页 > 解决方案 > Symfony Validator 不使用缓存

问题描述

我有 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

和缓存.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 选项是否有效?我可以把任何废话放在那里,它甚至不会抛出错误

标签: symfonyvalidationcaching

解决方案


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


推荐阅读