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