Sonata 管理员:每个批处理操作的特定 batch_confirmation 模板

Sonata admin : specific batch_confirmation template per batch action

今天上班,我必须在 Sonata 项目中创建自定义批处理操作。

没关系,问题是:

我想为我的新批处理操作设置一个特定的 batch_confirmation 模板, 我需要它对其他人没有影响。

如果不存在解决方案,我将覆盖默认的 batch_confirmation 模板,在我的奏鸣曲配置中更改它,并制作许多 'if' 语句来为我的其他管理员保留基本确认 类,但我认为这不是更清洁的选择。

有人遇到过这种问题吗?

当您添加自定义批处理操作时,您需要在控制器中添加一个自定义操作来扩展普通的 CRUD 控制器,请参阅:https://sonata-project.org/bundles/admin/master/doc/reference/batch_actions.html

而不是 return 重定向响应,就像您在文档中看到的那样:您可以 return 任何模板,例如:

return $this->render(
     'YourBundle:Batch:confirmation.html.twig',
      $templateParams
);

在此确认模板中,您可以添加自定义 html。当您想要确认批处理方法时,您需要一个表单,该表单使用您需要的数据回传到您的自定义操作。

从batch_confirmation.html.twig复制表格到你自己的确认模板。在原来的batch_confirmation模板中,设置了一个隐藏字段来检查用户是否确认:<input type="hidden" name="confirmation" value="ok">

如果用户确认(检查请求对象),请检查您的自定义操作。然后执行批处理操作。 (您也可以return第二步模板,构建向导)。

终于抛出一些闪现信息

$this->addFlash('sonata_flash_success', 'everything is ok!'); 

和 return 到列表 url:

return new RedirectResponse($this->admin->generateUrl('list', array('filter' => $this->admin->getFilterParameters())));

即使晚了一点 但对于遇到同样问题的新手来说,解决方法很简单,在函数configureBatchActions中你可以sepcify确认模板:

protected function configureBatchActions($actions)
{

        $actions['YourAction'] = [
            'ask_confirmation' => true,
            'template' => 'YourTemplate'
        ];

    return $actions;
}