aut*_*tix 2 php factory zend-framework-mvc zend-framework2
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'
)
),
),
...
);
Run Code Online (Sandbox Code Playgroud)
由于水合物实际上是由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'
)
),
),
);
Run Code Online (Sandbox Code Playgroud)
那么这里出了什么问题,如何在Zend Framework 2中为Hydrator注册一个Delegator Factory?
你是完全正确的,你必须注册你的水合器类的委托人HydratorPluginManager.问题在于你的关键名称module.config.php.
使用的关键是,hydrators而不是像你有hydrator_manager:
'hydrators' => array(
'delegators' => array(
//...your delegators config...
)
),
Run Code Online (Sandbox Code Playgroud)
我个人认为ZF2配置数组中的密钥命名是非常不一致和令人困惑的.如果您再次遇到类似的问题,请记住这一点.
另请查看Rob Allen的此页面,作为所有其他服务管理器配置键的参考.