如何在Zend Framework 2中为Hydator注册Delegator Factory?

时间:2015-07-31 15:50:54

标签: php zend-framework2 factory zend-framework-mvc

Zend Framework 2中的

Delegator Factories是一个强大的工具,可以用于创建标准ZF对象,并通过自定义ZF对象进行更改甚至完全复制。

我想为Hydrator创建一个Delegator Factory,以便为它附加一些Hydrator策略。但它还没有工作......

module.config.php

return array(
    ...
    'service_manager' => array(
        ...
        'invokables' => array(
            ...
            'AuthenticationAdapterDelegatorFactory' => 'Foo\\MvcAuth\\Factory\\AuthenticationAdapterDelegatorFactory', // <-- it works
            'DoctrineObjectHydratorDelegatorFactory' => 'Bar\\Model\\Entity\\Hydrator\\DoctrineObjectHydratorDelegatorFactory', // <-- it doesn't
        ),
        'delegators' => array(
            'ZF\\MvcAuth\\Authentication\\DefaultAuthenticationListener' => array( // <-- it works
                0 => 'AuthenticationAdapterDelegatorFactory',
            ),
            'DoctrineModule\\Stdlib\\Hydrator\\DoctrineObject' => array( // <-- it doesn't
                0 => 'DoctrineObjectHydratorDelegatorFactory'
            )
        ),
    ),
    ...
);

由于水合物实际上是由HydratorPluginManager提供的,我也是这样尝试的:

return array(
    'service_manager' => array(
        ...
        'invokables' => array(
            ...
            'DoctrineObjectHydratorDelegatorFactory' => 'Bar\\Model\\Entity\\Hydrator\\DoctrineObjectHydratorDelegatorFactory',
        ),
        'delegators' => array(
            ...
            'DoctrineModule\\Stdlib\\Hydrator\\DoctrineObject' => array( // <-- it doesn't
                0 => 'DoctrineObjectHydratorDelegatorFactory'
            )
        ),
    ),
    'hydrator_manager' => array(
        'delegators' => array(
            'DoctrineModule\\Stdlib\\Hydrator\\DoctrineObject' => array(
                0 => 'DoctrineObjectHydratorDelegatorFactory'
            )
        ),
    ),
);

那么这里出了什么问题?如何在Zend Framework 2中为Hydrator注册一个Delegator Factory?

1 个答案:

答案 0 :(得分:5)

你完全正确,你必须在HydratorPluginManager内注册你的保湿课程的委托人。问题在于module.config.php中的密钥名称。

使用的关键是hydrators,而不是hydrator_manager

'hydrators' => array(
    'delegators' => array(
        //...your delegators config...
    )
),

我个人认为ZF2配置阵列中的密钥命名非常不一致且令人困惑。如果您再遇到类似的问题,请记住这一点。

还检查this page from Rob Allen as a reference以获取所有其他服务管理器配置密钥。

enter image description here