相关疑难解决方法(0)

使用自定义Doctrine 2水化器进行依赖注入

我在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)

php orm doctrine symfony doctrine-orm

5
推荐指数
1
解决办法
2907
查看次数

标签 统计

doctrine ×1

doctrine-orm ×1

orm ×1

php ×1

symfony ×1