Как зарегистрировать Фабрику Делегаторов для Гидратора в Zend Framework 2?

Делегатор Фабрики в 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?

2

Решение

Вы совершенно правы, вы должны зарегистрировать делегатов для ваших классов гидраторов внутри HydratorPluginManager, Проблема заключается в названии ключа в вашем module.config.php,

Ключ для использования hydrators а не как у вас hydrator_manager:

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

Я лично считаю, что именование ключей в массивах конфигурации ZF2 очень противоречиво и сбивает с толку. Имейте это в виду, если у вас снова возникнут подобные проблемы.

Проверьте также эта страница от Роба Аллена в качестве ссылки для всех остальных ключей конфигурации диспетчера служб.

введите описание изображения здесь

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]