我正在使用SonataAdminBundle
,我想知道如何在edit
中添加自定义表单操作(类似于Save, Update and Close
的内容)
似乎没有关于它的任何记录。
我正在尝试添加一个自定义输入字段,该字段将调用控制器或其他内容来更新值并发送电子邮件
是否有关于如何执行此操作的文档或示例?
由于
答案 0 :(得分:5)
您可以通过添加新路由来添加自定义表单操作。因为当您添加新路线时,还需要添加操作来处理此路线。
您可以通过在Admin类中定义新路由来注册新路由。只有管理员路线才能以这种方式注册。
您以此方式定义的路线是在管理员的上下文中生成的,添加()唯一必需的参数是操作名称。第二个参数可用于定义要附加到 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>
只需覆盖您需要的模板并添加此自定义操作。