4

我用 Sonata(Symfony2 Bundle http://sonata-project.org/about)创建了一个管理面板,并且在 preRemove 钩子(Doctrine)中添加了一个事件。

简而言之,当我删除记录时,将 curl 运行到其他服务。一切正常。

奏鸣曲也有“批量操作”,我可以选择多行并选择“删除所有选定的”。

但是,如果我选择“删除所有选定的”卷曲没有开始。它没有被调用的 preRemove 钩子(Doctrine)。

有人可以帮助我吗?!

谢谢

4

2 回答 2

2

看来,批量删除操作确实避免了调用preRemove方法(查看Sonata\AdminBundle\Controller\CRUDController::batchActionDelete哪些调用Sonata\DoctrineORMAdminBundle\Model\ModelManager::batchDelete)。

但是,您有以下选择:

  1. batchActionDelete通过使用自定义控制器扩展来覆盖它CRUDControllerSonataMediaBundle 就是这样做的
  2. 注册真实的学说事件(不推荐)(Symfony 食谱教程
于 2013-09-10T19:24:45.783 回答
2

还有另一种选择,您可以在管理类中使用 preBatchAction 挂钩。

public function preBatchAction($actionName, ProxyQueryInterface $query, array & $idx, $allElements)
{
    if ($actionName == 'delete') {
         // logic here
    }
}

请参阅https://sonata-project.org/bundles/admin/master/doc/reference/batch_actions.html#optional-executing-a-pre-batch-hook

于 2015-04-10T10:46:38.327 回答