我在Symfony 2项目中在Doctrine 2中设置了一个定制水合器,但是为了满足它的需要它需要另一项服务.自定义水合器的文档仅显示如何提供水化器类,因此无法注入依赖项.
例如:
$em->getConfiguration()->addCustomHydrationMode('CustomHydrator', 'MyProject\Hydrators\CustomHydrator');
Run Code Online (Sandbox Code Playgroud)
我怀疑Doctrine正在初始化水化器本身,因此任何依赖都需要首先通过其他一些Doctrine类.
有没有办法提供一个定制的"水化工厂"或类似于Doctrine,可以注入额外的依赖?没有这种能力,定制水合物似乎相当有限.
答:感谢Denis V.
我的工作原理如下.我无法发布实际代码,因此我将一些虚拟占位符放在一起,以便您可以看到它是如何组合在一起的.
SRC /阿克米/ ExampleBundle /资源/配置/ services.yml
services:
doctrine.orm.entity_manager.abstract:
class: Acme\ExampleBundle\Entity\DoctrineEntityManager
factory_class: Acme\ExampleBundle\Entity\DoctrineEntityManager
factory_method: create
abstract: true
calls:
- [ setMyDependency, [@acme.my_custom_service]]
Run Code Online (Sandbox Code Playgroud)
SRC /阿克米/ ExampleBundle /实体/ DoctrineEntityManager.php
namespace Acme\ExampleBundle\Entity;
use Acme\ExampleBundle\Hydrator\MyHydrator;
use Doctrine\Common\EventManager;
use Doctrine\DBAL\Connection;
use Doctrine\ORM\Configuration;
use Doctrine\ORM\EntityManager as BaseEntityManager;
use Doctrine\ORM\ORMException;
use Doctrine\ORM\Query;
class DoctrineEntityManager extends BaseEntityManager
{
protected $myDependency;
/**
* Note: This must be redefined as Doctrine's own entity manager has its …Run Code Online (Sandbox Code Playgroud)