Это происходит потому, что конфигурация ZF2 ServiceManager
имеет значение по умолчанию initializers
для услуг, реализующих ServiceManagerAwareInterface
или ServiceLocatorAwareInterface
.
Вы можете найти ServiceManagerAwareInitializer
и ServiceLocatorAwareInitializer
в __construct
method of the ServiceManagerConfig
.
Чтобы достичь этого для своих собственных интерфейсов, вам необходимо зарегистрировать свой собственный initializer
. Вот пример того, как вы можете сделать это для переводчика:
'service_manager' => array(
'invokables' => array(
//...
),
'factories' => array(
//...
'translator' => 'My\Factory\TranslatorFactory'
),
'initializers' => array(
// Inject translator into TranslatorAwareInterface
'translator' => function($service, ServiceLocatorInterface $serviceLocator) {
if ($service instanceof TranslatorAwareInterface) {
$translator = $serviceLocator->get('translator');
$service->setTranslator($translator);
}
}
)
)
Вы должны убедиться, что вы зарегистрировали свой переводчик, как translator
в serviceManager
, чтобы сделать эту работу. Я создал его с помощью My\Factory\TranslatorFactory
.
Подробнее о initializers
в ZF2 documentation for the ServiceManager
.
Помните, что для каждой создаваемой вами службы initializer
будет проверять, нужно ли ей вводить вашу зависимость.
Как вы создаете экземпляр класса? –
Вызов $ serviceman-> get ('Class'), который вызовет фабрику для этого класса. – user2148043