У меня есть общий класс для повторного использования функций всех модулей. Я поместил это в
Application\Service\Utility.php
Теперь я могу создать объект в моем контроллере как
$utilObj = new Utility();
затем вызовите мою функцию как $utilObj->myFn();
Все работает нормально.
Но я не могу получить getServiceLocator()
функция там (внутри myFn в Utility.php). Есть ли способ решить эту проблему.
Мне нужен сервисный локатор, потому что мне нужно получить данные конфигурации, управление доктриной и т. Д.
Я не настроил getServiceConfig в module.php.
У меня есть такой класс в моем проекте.
Первый вариант, который у вас есть, — создать фабрику, которая в качестве зависимости включает ваш serviceManager.
А затем в ваших контроллерах (не рекомендуется) или в вашем модуле службы внедрить или получить свой служебный класс через менеджера службы с этим
$this->getServiceLocator()->get('Application\Service\UtilityClass')
Второе решение: ваш служебный класс — это сервис, который может реализовать этот интерфейс:
Zend\ServiceManager\ServiceLocatorAwareInterface;
И используйте эти черты (будьте осторожны, ваша версия PHP должна быть как минимум> 5.4)
Zend\ServiceManager\ServiceLocatorAwareTrait;
Это решение гарантирует вам в вашем обслуживании, что вы можете использовать $this->getServiceLocator()
в вашем классе любым методом, который вы хотите. Потому что любой «осведомленный» интерфейс, предоставляемый Zend Framework 2, разработан с инициализатором. Это автоматически добавит некоторые зависимости для вас.
Других решений пока нет …