我正在使用SonataAdminBundle
,我想知道如何在edit
(类似的东西Save, Update and Close
)中添加自定义表单操作
似乎没有关于它的任何记录.
我正在尝试添加一个自定义输入字段,该字段将调用控制器或某些内容来更新值并发送电子邮件
有关于如何做到这一点的文档或示例吗?
谢谢
您可以通过添加新路由来添加自定义表单操作.因为当您添加新路线时,您还需要添加操作来处理此路线.
您可以通过在Admin类中定义新路由来注册新路由.只有管理员路线才能以这种方式注册.
以这种方式定义的路由是在Admin的上下文中生成的,add()唯一需要的参数是操作名称.第二个参数可用于定义要附加到baseRoutePattern的URL格式,如果未明确设置,则默认为操作名称.
<?php use Sonata\AdminBundle\Route\RouteCollection; class MediaAdmin extends Admin { protected function configureRoutes(RouteCollection $collection) { $collection->add('myCustomAction'); $collection->add('view', $this->getRouterIdParameter().'/view'); } }
除了为新操作定义路由之外,还需要在Controller中为其创建处理程序.默认情况下,Admin类使用SonataAdminBundle:CRUD作为其控制器,但可以通过在定义Admin Service时更改第三个参数(在admin.yml文件中)来更改.
例如,让我们将MediaAdmin类的Controller更改为AcmeDemoBundle:MediaCRUD:
# src/Acme/DemoBundle/Resources/config/admin.yml sonata.admin.media: class: Acme\DemoBundle\Admin\MediaAdmin tags: - { name: sonata.admin, manager_type: orm, label: "Media" } arguments: - ~ - Acme\DemoBundle\Entity\Page - 'AcmeDemoBundle:MediaCRUD' # define the new controller via the third argument calls: - [ setTranslationDomain, [Acme\DemoBundle]]
我们现在需要创建我们的Controller,最简单的方法是扩展基本的Sonata CRUD控制器:
use Sonata\AdminBundle\Controller\CRUDController; class MediaCRUDController extends CRUDController { public function myCustomAction() { // your code here ... } }
在CRUD模板中,可以通过admin变量的generateUrl()命令生成当前Admin类的路由:
<a href="{{ admin.generateUrl('list') }}">List</a> <a href="{{ admin.generateUrl('list', params|merge('page': 1)) }}">List</a>
只需覆盖您需要的模板并添加此自定义操作即可.