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

时间:2018-03-14 14:43:23

标签: api doctrine sonata-admin

我的symfony / sonata应用程序中有一个实体,它不是通过doctrine orm持久化的。相反,我想通过调用api来按需填写这些实体的数据... 如何将此自定义托管实体与由doctrine orm管理的现有模型相关联? 有没有办法用我的自定义api调用交换学说管理部分?我知道有一些存储库函数,比如findAll()findBy()等等......是覆盖这些函数的解决方案吗?

另一种方法?

由于

1 个答案:

答案 0 :(得分:2)

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

1)创建自定义ModelManager类。在我的情况下,我扩展了为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与默认容器配置一起使用,则不需要,其中包括将类自动配置为服务)

# services.yml

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

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

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

希望有所帮助:)