本文整理汇总了PHP中Zend\ServiceManager\ServiceLocatorInterface::createScopedServiceManager方法的典型用法代码示例。如果您正苦于以下问题:PHP ServiceLocatorInterface::createScopedServiceManager方法的具体用法?PHP ServiceLocatorInterface::createScopedServiceManager怎么用?PHP ServiceLocatorInterface::createScopedServiceManager使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Zend\ServiceManager\ServiceLocatorInterface
的用法示例。
在下文中一共展示了ServiceLocatorInterface::createScopedServiceManager方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: createService
/**
* Create the controller loader service
*
* Creates and returns a scoped service manager. The only controllers
* this manager will allow are those defined in the application
* configuration's "controllers" array. If a controller is matched, the
* scoped manager will attempt to load the controller, pulling it from
* a DI service if a matching service is not found. Finally, it will
* attempt to inject the controller plugin manager if the controller
* implements a setPluginManager() method.
*
* @param ServiceLocatorInterface $serviceLocator
* @return ServiceManager
*/
public function createService(ServiceLocatorInterface $serviceLocator)
{
if (!$serviceLocator instanceof ServiceManager) {
return $serviceLocator;
}
$controllerLoader = $serviceLocator->createScopedServiceManager();
$configuration = $serviceLocator->get('Configuration');
if (isset($configuration['di']) && $serviceLocator->has('Di')) {
$di = $serviceLocator->get('Di');
$controllerLoader->addAbstractFactory(new DiAbstractServiceFactory($di, DiAbstractServiceFactory::USE_SL_BEFORE_DI));
$controllerLoader->addInitializer(new DiServiceInitializer($di, $serviceLocator));
}
$controllerLoader->addInitializer(function ($instance) use($serviceLocator) {
if ($instance instanceof ServiceLocatorAwareInterface) {
$instance->setServiceLocator($serviceLocator->get('Zend\\ServiceManager\\ServiceLocatorInterface'));
}
if ($instance instanceof EventManagerAwareInterface) {
$instance->setEventManager($serviceLocator->get('EventManager'));
}
if (method_exists($instance, 'setPluginManager')) {
$instance->setPluginManager($serviceLocator->get('ControllerPluginBroker'));
}
});
return $controllerLoader;
}
示例2: createService
/**
* Create the controller loader service
*
* Creates and returns a scoped service manager. The only controllers
* this manager will allow are those defined in the application
* configuration's "controllers" array. If a controller is matched, the
* scoped manager will attempt to load the controller, pulling it from
* a DI service if a matching service is not found. Finally, it will
* attempt to inject the controller plugin broker into the controller if
* it subscribes to the Pluggable interface.
*
* @param ServiceLocatorInterface $serviceLocator
* @return ServiceManager
*/
public function createService(ServiceLocatorInterface $serviceLocator)
{
if (!$serviceLocator instanceof ServiceManager) {
return $serviceLocator;
}
$controllerLoader = $serviceLocator->createScopedServiceManager();
$configuration = $serviceLocator->get('Configuration');
$routeMatch = $serviceLocator->get('application')->getMvcEvent()->getRouteMatch();
if ($routeMatch && $routeMatch instanceof \Zend\Mvc\Router\RouteMatch) {
$routeMatchName = $routeMatch->getMatchedRouteName();
$controllerName = $routeMatch->getParam('controller');
if (isset($configuration['router']['routes'][$routeMatchName]) && ($routeConfiguration = $configuration['router']['routes'][$routeMatchName])) {
if (isset($routeConfiguration['type']) && $routeConfiguration['type'] === 'Eva\\Mvc\\Router\\Http\\ModuleRoute') {
$configuration['controller']['classes'][$controllerName] = $controllerName;
}
}
}
if (isset($configuration['controller'])) {
foreach ($configuration['controller'] as $type => $specs) {
if ($type == 'classes') {
foreach ($specs as $name => $value) {
$controllerLoader->setInvokableClass($name, $value);
}
}
if ($type == 'factories') {
foreach ($specs as $name => $value) {
$controllerLoader->setFactory($name, $value);
}
}
}
}
if (isset($configuration['di']) && $serviceLocator->has('Di')) {
$di = $serviceLocator->get('Di');
$controllerLoader->addAbstractFactory(new DiAbstractServiceFactory($di, DiAbstractServiceFactory::USE_SL_BEFORE_DI));
$controllerLoader->addInitializer(new DiServiceInitializer($di, $serviceLocator));
}
$controllerLoader->addInitializer(function ($instance) use($serviceLocator) {
if ($instance instanceof ServiceLocatorAwareInterface) {
$instance->setServiceLocator($serviceLocator->get('Zend\\ServiceManager\\ServiceLocatorInterface'));
}
if ($instance instanceof EventManagerAwareInterface) {
$instance->setEventManager($serviceLocator->get('EventManager'));
}
if ($instance instanceof Pluggable) {
$instance->setBroker(clone $serviceLocator->get('ControllerPluginBroker'));
}
});
return $controllerLoader;
}