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' ); 

Проверьте это. У него есть два решения. Одним из них является реализация интерфейса с поддержкой локатора служб. Другой способ - внедрить сервисный менеджер в вашу модель. Для обоих случаев вам нужно создать экземпляр объекта модели через менеджер сервисов.

Другие вопросы по тегам