Zend framework2 Zend Framework 2:无法在自定义类上获取servicelocator

Zend framework2 Zend Framework 2:无法在自定义类上获取servicelocator,zend-framework2,Zend Framework2,我无法在自定义类上加载服务位置,请参阅下面的错误代码,如有任何建议,将不胜感激 在中调用null上的成员函数get() /var/www/html/engsvc_dev/module/Application/src/Application/Helper/EmailHelper.php 第23行 为了注入ServiceManager实例,它是Zend\ServiceManager\ServiceLocatorInterface的一个实现,您需要如下实例化该类: $emailHelper = $t

我无法在自定义类上加载服务位置,请参阅下面的错误代码,如有任何建议,将不胜感激

在中调用null上的成员函数get() /var/www/html/engsvc_dev/module/Application/src/Application/Helper/EmailHelper.php 第23行


为了注入
ServiceManager
实例,它是
Zend\ServiceManager\ServiceLocatorInterface
的一个实现,您需要如下实例化该类:

$emailHelper = $this->getServiceLocator()->get('EmailHelper');
另外,不要忘记在Module.php中注册该类

public function getServiceConfig()
{
    return array(
        'invokables' => array(
            'EmailHelper' => 'Application\Helper\EmailHelper'
        )
    );
}

为了注入
ServiceManager
实例,它是
Zend\ServiceManager\ServiceLocatorInterface
的一个实现,您需要如下实例化该类:

$emailHelper = $this->getServiceLocator()->get('EmailHelper');
另外,不要忘记在Module.php中注册该类

public function getServiceConfig()
{
    return array(
        'invokables' => array(
            'EmailHelper' => 'Application\Helper\EmailHelper'
        )
    );
}

我正在尝试在EmailHelper类中使用servicelocator本身servicelocator未在EmailHelper类中实例化,因为您很可能使用new初始化该类,而不是像上面的回答中那样使用依赖项注入。是的,服务定位器不应直接在您的类中使用(虽然可以),但通过类的工厂…只有在那里,您才应该向他询问您的依赖项,并在实例化时将它们作为参数传递给您的类“
\u construct
方法;)很高兴它工作了,请确保接受进一步引用的答案。我正在尝试在EmailHelper类中使用servicelocator本身。servicelocator未在EmailHelper类中实例化,因为您很可能使用new初始化该类,而不是像上面的答案中那样使用依赖项注入。是的,服务定位器不应该直接在类中使用(尽管可以),而是通过类的工厂使用。。。只有在那里,您才应该向他询问您的依赖项,并在实例化时将它们作为参数传递给类“
\u construct
方法;”很高兴它起作用了,请务必接受答复以供进一步参考。