2015-05-27 44 views
7

我正在使用具有ACL的Sonata-Admin包,但我必須以編程方式創建一些對象。但我無法弄清楚我如何正確更新創建的實體的ACL表。所以,我總是要執行以編程方式創建對象與索納塔更新ACL

PHP應用程序/控制檯奏鳴曲:管理員:生成對象的ACL

這當然不是長久之計。

我試着像這樣描述:http://symfony.com/doc/current/cookbook/security/acl.html#creating-an-acl-and-adding-an-ace所以我在我的實體中實現了DomainObjectInterface並添加了getObjectIdentifier方法。

但現在我在執行的時候得到一個Symfony的\分量\安全\的Acl \異常\ AclAlreadyExistsException例外:

PHP應用程序/控制檯奏鳴曲:管理員:生成對象的ACL

所以我想這不是使用sonata-admin時正確的方法。但我在文檔中找不到任何內容。

回答

2

好吧,我花了一些時間來調試多一點,我想我找到了一個很好的解決方案:

獲取管理對象的類要創建:

$whateverAdmin = $this->get('app.admin.whatever'); 

//create the object 
$whatever = new Whatever(); 
$whatever->setName('test'); 

而現在使用admin類創建對象:

$whateverAdmin->create($whatever); 

或者,如果你想使用EntityManager保持你可以只更新與管理類ACL:

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

$whateverAdmin->createObjectSecurity($whatever);