Php Sonata管理员:将自定义触发器/操作添加到列表/编辑操作

Php Sonata管理员:将自定义触发器/操作添加到列表/编辑操作,php,symfony,symfony-sonata,sonata-admin,Php,Symfony,Symfony Sonata,Sonata Admin,我正在使用SonataAdminBundle管理应用程序中的实体。网站管理员可以添加视频,其中一些视频首先需要得到发言人的批准。有一个授权系统已经开始工作-我有一个工作代码,它将生成一个特殊链接并通知演讲者,演讲者可以批准或不批准视频,并自动通知管理员 我想自定义我的管理部分,因此在视频旁边会有一个按钮请求授权。我可以在列表操作(/admin/acme/videos/list)或右导航的某个地方的编辑操作(/admin/acme/videos/x/edit/)中使用它 最好的方法是什么?文档中很

我正在使用
SonataAdminBundle
管理应用程序中的实体。网站管理员可以添加视频,其中一些视频首先需要得到发言人的批准。有一个授权系统已经开始工作-我有一个工作代码,它将生成一个特殊链接并通知演讲者,演讲者可以批准或不批准视频,并自动通知管理员

我想自定义我的管理部分,因此在视频旁边会有一个按钮
请求授权
。我可以在列表操作(
/admin/acme/videos/list
)或右导航的某个地方的编辑操作(
/admin/acme/videos/x/edit/
)中使用它

最好的方法是什么?文档中很少提到块定制,但我找到了我想要的东西,但我不知道如何使用它


一个选项是使用
preUpdate
钩子,并在编辑操作中添加一个复选框,但是一个按钮会更好。

为编辑表单添加一个操作

添加到您的管理类:

protected function configureSideMenu(MenuItemInterface $menu, $action, Admin $childAdmin = null)
{
    if (!$childAdmin && !in_array($action, array('edit'))) {
        return;
    }
    $admin = $this->isChild() ? $this->getParent() : $this;
    $id = $admin->getRequest()->get('id');
    $menu->addChild('My action', array('uri' => 'http://google.com?id=' . $id));
}
它将为/admin/acme/videos/x/edit/等操作创建左侧菜单。拥有当前项目的id允许您构建任何自定义URL

要为列表添加操作,请执行以下操作: 在您的管理文件中添加

protected function configureListFields(ListMapper $listMapper)
{
    $listMapper
        ->add('_action', 'actions', array(
            'actions' => array(
                'act' => array('template' => 'AcmeBundle:Video:my_temp.html.twig'),
            )
        ))
    ;
}
它将添加一个带有链接的列,然后您需要为您的列创建一个模板,如

<a href="{{ admin.generateObjectUrl('delete', object) }}" class="delete_link" title="{% trans from 'SonataAdminBundle' %}action_delete{% endtrans %}">
    <img src="{{ asset('bundles/sonataadmin/famfamfam/delete.png') }}" alt="{% trans from 'SonataAdminBundle' %}action_delete{% endtrans %}" />
</a>


所有示例均取自您提供的链接。希望有帮助

配置侧菜单
已被弃用。改用
configureTabMenu