Делегатор Фабрики в Zend Framework 2 — мощный инструмент, позволяющий подключиться к созданию стандартных объектов ZF и изменить или даже полностью заменить их на пользовательские.
Я хочу создать Фабрику Делегаторов для Гидратора, чтобы присоединить к ней некоторые Стратегии Гидратора. Но это еще не работает …
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'
)
),
),
);
Так что же здесь не так и как я могу зарегистрировать фабрику делегаторов для Hydrator в Zend Framework 2?
Вы совершенно правы, вы должны зарегистрировать делегатов для ваших классов гидраторов внутри HydratorPluginManager
, Проблема заключается в названии ключа в вашем module.config.php
,
Ключ для использования hydrators
а не как у вас hydrator_manager
:
'hydrators' => array(
'delegators' => array(
//...your delegators config...
)
),
Я лично считаю, что именование ключей в массивах конфигурации ZF2 очень противоречиво и сбивает с толку. Имейте это в виду, если у вас снова возникнут подобные проблемы.
Проверьте также эта страница от Роба Аллена в качестве ссылки для всех остальных ключей конфигурации диспетчера служб.
Других решений пока нет …