使用Sonata Admin

时间:2015-05-27 17:02:59

标签: symfony sonata-admin

我正在使用带有ACL的Sonata-Admin软件包,但我必须以编程方式创建一些对象。但我无法弄清楚如何正确更新已创建实体的ACL表。所以我总是要执行

  

php app / console sonata:admin:generate-object-acl

这当然不是永久的解决方案。

我尝试过这样描述:http://symfony.com/doc/current/cookbook/security/acl.html#creating-an-acl-and-adding-an-ace所以我在我的实体中实现了DomainObjectInterface并添加了getObjectIdentifier方法。

但是现在我在执行时遇到Symfony \ Component \ Security \ Acl \ Exception \ AclAlreadyExistsException异常:

  

php app / console sonata:admin:generate-object-acl

所以我猜这不是使用sonata-admin时这样做的正确方法。但我在文档中找不到任何内容。

1 个答案:

答案 0 :(得分:2)

好的,我花了一些时间调试一下,我觉得我找到了一个很好的解决方案:

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

$whateverAdmin->create($whatever);

现在使用admin类创建对象:

$em->persist($whatever);
$em->flush(); // important to flush first so an ID ist generated

$whateverAdmin->createObjectSecurity($whatever);

或者,如果您想使用entityManager来持久化,您可以使用admin类更新ACL:

data-show="true"