Миграция ZF2 в ZF3: горячая конвертация "realServiceLocator"?

В Factory В классах моего приложения Zend Framework 2 я часто использовал такую ​​конструкцию:

// The signature was actually wrong, since it was always the `AbstractPluginManager` (or the `Zend\ServiceManager\ServiceManager` for the "common" services) and not just `ServiceLocator`, and it also was used as `AbstractPluginManager` (or `ServiceManager` for the "common" services). The `ServiceLocatorInterface` did not provide the `getServiceLocator()` method.
public function createService(ServiceLocatorInterface $serviceLocator)
{
    // the common ServiceLocator
    $realServiceLocator = $serviceLocator->getServiceLocator();
    $myServiceFoo = $realServiceLocator->get('My\Service\Foo');
    $myServiceBar = new \My\Service\Bar($myServiceFoo);
    ...
}

Таким образом, чтобы получить доступ к "общему" сервису, я сначала получил ServiceLocator, Такой подход был необходим на заводах для Hydrator s, Controller и другие услуги, которые имеют свои собственные ServiceManager s. Потому что для них вход ServiceLocator было AbstractPluginManager а не Zend\ServiceManager\ServiceManager,

Теперь я сделал первый шаг миграции для своих фабрик и заменил некоторые общие вещи:

public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
{
    // the common ServiceLocator
    $realServiceLocator = $container->getServiceLocator();
    $myServiceFoo = $realServiceLocator->get('My\Service\Foo');
    $myServiceBar = new \My\Service\Bar($myServiceFoo);
    ...
}

Как адаптировать $container->getServiceLocator() к ZF3?

1 ответ

getServiceLocator() устарела, так что вы не можете использовать это в ZF3. Вы сможете сделать менеджер сервисов доступным, используя экземпляр Interop\Container\ContainerInterface делая фабрики как следующие

public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
{
    $myServiceFoo = $container->get('My\Service\Foo');
    $myServiceBar = new \My\Service\Bar($myServiceFoo);
    ...
}
Другие вопросы по тегам