奏鸣曲批量操作&钩子主义

时间:2013-09-10 15:40:18

标签: php curl doctrine-orm sonata-admin symfony-sonata

我已经创建了一个带有Sonata(Symfony2 Bundle http://sonata-project.org/about)的管理面板,我在preRemove挂钩(Doctrine)中添加了一个事件。

简单地说,当我删除记录时,运行curl到其他服务。 万事都有效。

Sonata还有“批量操作”,我可以选择多行,然后选择“全部删除”。

但是,如果我选择“删除所有选中”,则卷曲不会启动。 preRemove挂钩(Doctrine)它没有被调用。

有人可以帮助我吗?!

由于

2 个答案:

答案 0 :(得分:2)

看来,批量删除操作确实避免了调用preRemove方法(请参阅调用Sonata\AdminBundle\Controller\CRUDController::batchActionDelete的{​​{1}})。

但是,你有选择:

  1. 使用自定义控制器扩展Sonata\DoctrineORMAdminBundle\Model\ModelManager::batchDelete覆盖batchActionDeleteSonataMediaBundle does that
  2. 注册真实学说事件(不推荐)(Symfony cookbook tutorial

答案 1 :(得分: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