如何在索纳塔管理中实现自定义模型管理器



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

另一种方法?

谢谢

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

1( 创建自定义模型管理器类。就我而言,我扩展了为教义(SonataDoctrineORMAdminBundleModelModelManager(提供的教义,但您也可以直接实现SonataAdminBundleModelModelManagerInterface。覆盖您需要更改的方法(例如 create()update()delete()(。

# MyCustomModelManager.php
namespace AppBundleAdmin;
use SonataDoctrineORMAdminBundleModelModelManager;
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
...
AppBundleAdminMyCustomModelManager:
    arguments: [ '@doctrine' ]
...

3( 将管理员类配置为使用自定义模型管理器,例如:

app.admin.myadmin:
    class: AppBundleAdminMyAdmin
    tags:
        - { name: sonata.admin, manager_type: orm }
    arguments: [~, AppBundleEntityMyEntity, ~]
    calls:
        - [ setModelManager, [ '@AppBundleAdminMyCustomModelManager' ]]

希望对:)有所帮助

最新更新