gpt4 book ai didi

symfony - SonataAdmin 自定义表单操作

转载 作者:行者123 更新时间:2023-12-02 08:37:07 25 4
gpt4 key购买 nike

我正在使用 SonataAdminBundle,我想知道如何在 edit 中添加自定义表单操作(类似于 Save、Update 和关闭)

似乎没有任何关于它的记录。

我正在尝试添加一个自定义输入字段,它将调用 Controller 或其他东西来更新值并发送电子邮件

是否有关于如何执行此操作的任何文档或示例?

谢谢

最佳答案

您可以通过添加新路由来添加自定义表单操作。因为当您添加新路由时,您还需要添加操作来处理该路由。

创建路线

您可以通过在 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 中为其创建一个处理程序。默认情况下,管理类使用 SonataAdminBundle:CRUD 作为它们的 Controller ,但这可以通过在定义管理服务(在 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 Controller :

use Sonata\AdminBundle\Controller\CRUDController;

class MediaCRUDController extends CRUDController
{
public function myCustomAction()
{
// your code here ...
}
}

在 CRUD 模板中,可以通过管理变量的 generateUrl() 命令生成当前 Admin 类的路由:

<a href="{{ admin.generateUrl('list') }}">List</a>

<a href="{{ admin.generateUrl('list', params|merge('page': 1)) }}">List</a>

只需覆盖您需要的模板并添加此自定义操作即可。

关于symfony - SonataAdmin 自定义表单操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20271883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com