如何在Sonata Admin中添加全局操作?

wew*_*web 3 symfony sonata-admin

好吧,我的Symfony2项目中的Sonata Admin存在一个相当基本的问题.

我有一个"产品"列表视图,我的网上商店出售的每个产品.在右上角的"操作"菜单中,我有默认操作,只有一个名为"添加新"的操作.

在奏鸣曲管理员列表视图

我只想在"添加新"旁边添加更多操作:自定义操作,例如"从所有产品中删除促销价格"或"删除所有产品评估".

我不想进行"批处理"操作,我想要一个导致自定义数据库查询的"全局"操作.

我在文档中找到的所有内容都与批处理操作或"单行操作"有关.有办法做我想要的吗?

谢谢您的帮助 !

Wou*_*r J 6

创建和配置自定义管理扩展并覆盖configureActionButtons(AdminInterface $admin, $list, $action, $object)添加自定义操作的方法:

use Sonata\AdminBundle\Admin\AdminExtension;
use Sonata\AdminBundle\Admin\AdminInterface;
use Sonata\AdminBundle\Route\RouteCollection;

class CustomGlobalActionsExtension extends AdminExtension
{
    public function configureActionButtons(AdminInterface $admin, $list, $action, $object)
    {
        return array_merge($list, [
            ['template' => 'admin/custom_action.html.twig']
        ]);
    }

    public function configureRoutes(AdminInterface $admin, RouteCollection $collection)
    {
        $collection->add('custom_action', $admin->getRouterIdParameter().'/custom_action');
    }
}
Run Code Online (Sandbox Code Playgroud)
{# app/Resources/views/admin/custom_action.html.twig #}
<a class="btn btn-sm" href="{{ admin.generateObjectUrl('custom_action', object) }}">Custom Action</a>
Run Code Online (Sandbox Code Playgroud)

另见https://sonata-project.org/bundles/admin/2-3/doc/cookbook/recipe_custom_action.html