【问题标题】:Doctrine 2 proxy classes breaking Symfony2 ACL违反 Symfony2 ACL 的 Doctrine 2 代理类
【发布时间】:2011-09-19 19:56:21
【问题描述】:

当尝试在由 init:acl 生成的 acl_classes 表中具有现有条目的实体上运行 findAcl() 时,我收到 AclNotFoundException。

在调用 findAcl() 之前对相关对象使用 createAcl() 进行测试会在 acl_classes 中显示同一类型的代理类的新记录,并且操作成功完成。

这似乎不对,代理应该是透明的吧,还是我遗漏了什么?

【问题讨论】:

标签: doctrine-orm symfony acl proxy-classes


【解决方案1】:

我只是在回答这个问题,因为我很难找到解决方案,而这对我来说是 google 的第一个结果。

是的,这是错误的,这是 symfony2 的一个已知错误。

Jonathan Ingram 解决了这个问题,并在不久前写了一篇关于它的帖子: http://jonathaningram.com.au/2012/01/13/overriding-the-objectidentityretrievalstrategy-to-check-if-a-domain-object-is-a-doctrine-proxy/

他创建了自己的对象身份检索策略来覆盖默认值,并将其注册在 services.xml 中(参见上面的帖子)。其实这是一个非常简单直接的解决方案,我有点惭愧我自己没有想出来:)

在 symfony2.1 中不再是问题,请参阅:https://github.com/symfony/symfony/pull/3826

【讨论】:

  • 只是为了完成这篇文章,我遇到了同样的问题,但 $idFranquicia = UserSecurityIdentity::fromAccount($franquicia) 在 ACL 表中插入代理和实体。解决方案是直接使用具有类的完全限定名称 (FQN) 的构造函数,例如 $idFranquicia = new UserSecurityIdentity($franquicia->getUsername(), 'MiAlarma\SuperuserBundle\Entity\Franquicia')
猜你喜欢
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-21
  • 2011-06-22
  • 2011-12-17
  • 1970-01-01
相关资源
最近更新 更多