2

有没有关于如何在 Symfony2 中缓存 ACL 查询的示例或更好的文档。

我发现以下内容:

http://api.symfony.com/2.0/Symfony/Component/Security/Acl/Domain/DoctrineAclCache.html

但我不完全知道如何在我的支票上应用它。

4

1 回答 1

1

我设法缓存了 ObjectIdentities。这有点帮助,但不多。

在对 security*.xml 文件进行了大量研究之后,我对 config.yml 进行了以下修改:

  • 我已将缓存 ID(服务 ID)添加到 ACL 配置
  • 我已经启用了 Doctrine 结果缓存。

配置.yml:

doctrine:
    orm:
        result_cache_driver:
            type: apc

security:
    acl:
        cache:
            id:     security.acl.cache.doctrine
            prefix: my_acl_prefix_

这只会启用 ObjectIdentities 的缓存,但Symfony\Component\Security\Acl\Dbal\AclProvider::getAncestorIds()在调用时会发生许多其他查询。该方法直接执行 SQL 查询,并且不使用缓存。在 2.2 和 2.3 方法中有一条注释说:

            // FIXME: skip ancestors which are cached

同样代表该类中不使用结果缓存的其他几个方法。

我想通过实现您自己的 AclProvider 并注入实体管理器的结果缓存,您也可以缓存这些查询。

于 2014-01-23T13:02:25.950 回答