如何在 sonata admin 中实现自定义模型管理器

How to implement custom model manager in sonata admin

我的 symfony/sonata 应用程序中有一个实体不是通过 doctrine orm 持久化的。相反,我想通过调用 api 来按需为这些实体填充数据 ... 我如何将这个自定义托管实体与我现有的由 doctrine orm 管理的模型连接起来? 有没有办法用我的自定义 api 调用来交换学说管理部分?我知道有一些存储库函数,例如 findAll() findBy() 等等...是否可以解决覆盖这些函数的问题?

另一种方法?

谢谢

我有一个类似的用例。我最终得到了大致如下的解决方案。

1) 创建自定义 ModelManager class。在我的例子中,我扩展了为 Doctrine (Sonata\DoctrineORMAdminBundle\Model\ModelManager) 提供的那个,但你也可以直接实现 Sonata\AdminBundle\Model\ModelManagerInterface。 覆盖您需要更改的方法(例如 create()update()delete())。

# MyCustomModelManager.php

namespace AppBundle\Admin;

use Sonata\DoctrineORMAdminBundle\Model\ModelManager;

class MyCustomModelManager extends ModelManager {

    public function create($object){ // Your custom implementation }

    public function create($object){ // Your custom implementation }

    public function create($object){ // Your custom implementation }

}

2) 将您的新模型管理器注册为服务(如果您将 Symfony 3.3 与默认容器配置一起使用则不需要,其中包括 classes 自动配置为服务)

# services.yml

...
AppBundle\Admin\MyCustomModelManager:
    arguments: [ '@doctrine' ]
...

3) 配置您的管理员 class 以使用您的自定义模型管理器,例如:

app.admin.myadmin:
    class: AppBundle\Admin\MyAdmin
    tags:
        - { name: sonata.admin, manager_type: orm }
    arguments: [~, AppBundle\Entity\MyEntity, ~]
    calls:
        - [ setModelManager, [ '@AppBundle\Admin\MyCustomModelManager' ]]

希望对您有所帮助:)