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?
答案 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以获取所有其他服务管理器配置密钥。