Symfony 使用Sonata Admin更新以编程方式创建的对象上的ACL

Symfony 使用Sonata Admin更新以编程方式创建的对象上的ACL,symfony,sonata-admin,Symfony,Sonata Admin,我将Sonata管理包与ACL一起使用,但我必须以编程方式创建一些对象。但是我不知道如何正确地更新所创建实体的ACL表。所以我总是要执行 php应用程序/控制台sonata:admin:generate object acl 这当然不是一个永久的解决办法 我试着像这里描述的那样做:所以我在实体中实现了DomainObjectInterface,并添加了getObjectIdentifier方法 但现在我在执行以下操作时收到一个Symfony\Component\Security\Acl\Exce

我将Sonata管理包与ACL一起使用,但我必须以编程方式创建一些对象。但是我不知道如何正确地更新所创建实体的ACL表。所以我总是要执行

php应用程序/控制台sonata:admin:generate object acl

这当然不是一个永久的解决办法

我试着像这里描述的那样做:所以我在实体中实现了DomainObjectInterface,并添加了getObjectIdentifier方法

但现在我在执行以下操作时收到一个Symfony\Component\Security\Acl\Exception\AclAlreadyExistsException异常:

php应用程序/控制台sonata:admin:generate object acl


所以我想当使用sonata admin时,这不是正确的方法。但是我在文档中找不到任何东西。

好的,我花了一些时间进行了更多的调试,我认为我找到了一个很好的解决方案:

获取要创建的对象的管理类:

$whateverAdmin=$this->get('app.admin.whatever');
//创建对象
$whater=新的whater();
$whatever->setName('test');
现在使用admin类创建对象:

$whateverAdmin->create($whatever);
或者,如果您想使用entityManager持久化,您可以使用admin类更新ACL:

$em->persist($whatever);
$em->flush();//首先刷新以便生成ID很重要
$whateverAdmin->createObjectSecurity($whatever);