Zend Framework 2 обращается к глобальной конфигурации в классе модели
У меня есть класс модели, который не расширяет какой-либо основной модуль Zend. Эта модель была импортирована из моего предыдущего приложения Zend Framework 1. Я могу вызвать его методы, преобразовав его в пространство имен. Проблема, которую я имею в том, чтобы прочитать глобальную конфигурацию в сторону определенных методов.
В случае контроллера я смог получить доступ к глобальной конфигурации, используя следующий код
$config = $this->getServiceLocator()->get('config');
// This gives a union of global configuration along with module configuration .
Но что мы должны сделать, чтобы получить доступ к конфигурации в классе модели. Вот как выглядит мой модельный класс
<?php
namespace test\Http;
class Request
{
protected $client;
public function abc( $c)
{
return $something;
}
......
}
Я новичок в Zend Framework 2, пожалуйста, предложите любой метод для достижения этой цели.
В приведенном выше описании подразумевается модель (класс модели MVC), в которой есть некоторая бизнес-логика.
3 ответа
Предполагая, что вы создаете свой сервис (ваш код выглядит как сервис), вы, вероятно, создадите его экземпляр на фабрике сервисов (в данном случае я поместил его в конфигурацию модуля):
class MyModule
{
public function getServiceConfig()
{
return array(
'factories' => array(
'my_request_object' => function (
\Zend\ServiceManager\ServiceLocatorInterface $sl
) {
$config = $sl->get('config');
return new \GaGooGl\Http\Request($config);
},
),
);
}
}
Таким образом, вы вводите объект конфигурации непосредственно в его потребителя (без ссылки на локатор службы в потребителе)
Другой способ заключается в реализации Zend\ServiceManager\ServiceLocatorAwareInterface
в вашем GaGooGl\Http\Request
, Я лично не одобряю это, но это в основном позволяет вам иметь Request
объект хранит внутри себя ссылку на локатор службы, что позволяет получить config
сервис во время выполнения.
Самый простой способ сделать это
$config = new \Zend\Config\Config( include APPLICATION_PATH.'/config/autoload/global.php' );
Проверьте это. У него есть два решения. Одним из них является реализация интерфейса с поддержкой локатора служб. Другой способ - внедрить сервисный менеджер в вашу модель. Для обоих случаев вам нужно создать экземпляр объекта модели через менеджер сервисов.