簡體   English   中英

SonataAdmin自定義表單操作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM