I am trying to use Lazy Services in ZF2 through a custom plugin manager (not a service manager).
The plugin manager is as follows.
use Zend\ServiceManager\AbstractPluginManager;
use Zend\ServiceManager\Exception\RuntimeException;
class EntityServiceManager extends AbstractPluginManager
{
protected $autoAddInvokableClass = false;
public function validatePlugin($service)
{
if ($service instanceof EntityServiceInterface) {
return;
}
throw new RuntimeException(sprintf(
'Services created by \'%s\' must be of type \'%s\'; \'%s\' provided in \'%s\'.',
get_called_class(),
'EntityServiceInterface',
(is_object($service) ? get_class($service) : gettype($service)),
__METHOD__
));
}
}
According to the documentation; I configured the "UserService" service for lazy loading through this plugin manager.
'service_manager' => [
'factories' => [
'Zend\\ServiceManager\\Proxy\\LazyServiceFactory'
=> 'Zend\\ServiceManager\\Proxy\\LazyServiceFactoryFactory',
],
],
'lazy_services' => [
'class_map' => [
'User\\Entity\\User' => 'User\\Service\\UserService',
],
],
'entity_service_manager' => [
'delegators' => [
'User\\Entity\\User' => [
'Zend\\ServiceManager\\Proxy\\LazyServiceFactory',
],
],
'factories' => [
'User\\Entity\\User' => 'User\\Factory\\Service\\UserServiceFactory'
],
],
The problem is that it is LazyServiceFactoryregistered in the ServiceManager and therefore cannot be found if the request is requested through $entityServiceManager->get('Spectrum\\User\\Entity\\User').
Error:
Fatal error allowed: argument 1 passed to Zend \ ServiceManager \ Proxy \ LazyServiceFactory :: __ construct () must be an instance of ProxyManager \ Factory \ LazyLoadingValueHolderFactory, not a single one
, factory invokable, LazyServiceFactoryFactory.
, factory .
`$entityServiceManager->addPeeringServiceManager($serviceManager);`
factory, validatePlugin().
Zend\ServiceManager\Exception\RuntimeException ' ", " EntityServiceManager ", " EntityServiceInterface "; 'Zend\ServiceManager\Proxy\LazyServiceFactory' 'EntityServiceManager:: validatePlugin'. '
?