Sonata User Bundle 自定义批处理操作

Posted

技术标签:

【中文标题】Sonata User Bundle 自定义批处理操作【英文标题】:Sonata User Bundle custom batch action 【发布时间】:2017-05-17 08:04:00 【问题描述】:

正如标题所示,我需要将自定义批处理操作添加到SonataUserBundle

通过此操作,操作员可以向所有用户(或选定用户)发送消息。因此它需要扩展 SonataAdminBundle 以便能够为此操作添加自定义视图。

问题是,ApplicationSonataUserBundle.php 覆盖了SonataUserBundle

class ApplicationSonataUserBundle extends Bundle

    /**
     * @inheritdoc
     */
    public function getParent()
    
        return 'SonataUserBundle';
    

如果我更改它,它将破坏捆绑包。

是否有任何解决方案可以将此批处理操作添加到捆绑包中?

【问题讨论】:

> 因此它需要扩展 SonataAdminBundle 以便能够为此操作添加自定义视图。你确定吗?我看不到逻辑链接是什么。 是的,除非它显示Action... is not callable 如果你看到这条消息,你只需要创建动作,就像任何其他 Symfony 动作一样。 是的,我之前在其他捆绑包中这样做过,但它不适用于用户捆绑包 您从控制器启动批处理操作?为什么不使用命令? 【参考方案1】:

您需要编辑 sonata_user 配置以使用您自己的控制器而不是默认的 Sonata Admin CRUD 控制器。

所以在你的 config.yml 中添加以下内容:

sonata_user:
    admin:           
        user:
            controller:     MyAppMyBundle:UserAdmin

并创建您自己的扩展 CRUDController 的控制器

namespace MyApp\MyBundle\Controller;

use Sonata\AdminBundle\Controller\CRUDController as Controller;

class UserAdminController extends Controller


现在您可以像这样添加自己的批处理操作

class UserAdminController extends Controller

   public function batchActionSendMail(ProxyQueryInterface $selectedModelQuery) 
         
      $selectedModels = $selectedModelQuery->execute();

      // Your stuff here

      return new RedirectResponse($this->admin->generateUrl('list', $this->admin->getFilterParameters()));
   

希望对某人有所帮助:)

【讨论】:

以上是关于Sonata User Bundle 自定义批处理操作的主要内容,如果未能解决你的问题,请参考以下文章

Sonata Admin Bundle - 表单类型:sonata_type_collection - 自定义模板?

Sonata Admin Bundle - 自定义模板

Sonata Admin Bundle 如何配置批处理操作

Symfony2 Sonata Media Bundle 自定义图像裁剪

Sonata Admin Bundle 使用注释的自定义路由

Sonata admin bundle:从全局搜索中排除自定义管理员