[英]SonataAdmin custom form action
我正在使用SonataAdminBundle
,我想知道如何在edit
添加自定義表單操作(類似於Save, Update and Close
)
似乎沒有任何記載。
我正在嘗試添加一個自定義輸入字段,該字段將調用控制器或其他東西來更新值並發送電子郵件
是否有任何有關此操作的文檔或示例?
謝謝
您可以通過添加新路線來添加自定義表單操作。 因為當您添加新路線時,還需要添加操作來處理該路線。
您可以通過在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服務時(在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]]
現在,我們需要創建控制器,最簡單的方法是擴展基本的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>
只需覆蓋您需要的模板並添加此自定義操作即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.