In den Factory
Klassen meines Zend Framework 2-Anwendung, ich eine solche Konstruktion oft verwendet:ZF2 zu ZF3 migrieren: Heiss um den "realServiceLocator" zu konvertieren?
// 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);
...
}
So eine „gemeinsame“ Dienst zuzugreifen, ich abgerufen zuerst die ServiceLocator
. Dieser Ansatz war in Fabriken für Hydrator
s, Controller
s und andere Dienste notwendig, die ihre eigenen ServiceManager
s haben. Denn für sie war der Eingang ServiceLocator
AbstractPluginManager
und nicht der Zend\ServiceManager\ServiceManager
.
Jetzt habe ich den ersten Migrationsschritt für meine Fabriken und ersetzt einige gemeinsame Dinge:
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);
...
}
Wie die $container->getServiceLocator()
zum ZF3 anzupassen?
Es lohnt sich bei der Migration Guide für ZF3 Service-Manager suchen zu machen, das Plugin-Manager Abschnitt erläutert, wie Plugin-Manager geändert haben, http://zendframework.github.io/zend-servicemanager/migration/#plugin-managers Im Abschnitt "AbstractPluginManager" (die Klasse, von der alle Zend Component Plugin-Manager erben) wird erklärt, dass der Konstruktor nun die übergeordnete Container-Instanz als erste akzeptiert Streit; Dies ist normalerweise die ServiceManager-Instanz auf Anwendungsebene. "Im Falle von ZF-Plugin-Managern erhalten Sie den' $ realServiceLocator' als '$ -Container' in Ihren Plugin-Factories – Crisp