如何在 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' ]]
希望对您有所帮助:)
我的 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' ]]
希望对您有所帮助:)