2013-06-14 3 views
2

Кто-нибудь знает, как передать экземпляр пользовательского Service Manager между двумя действиями? Как сказано в документации по Zend Framework 2, SM сохранит экземпляр, если параметр «shared» внутри класса Module.php не будет установлен в false. Однако получение менеджера сервиса через $manager = $this->getServiceLocator()->get('MyServiceManager'); в разных действиях приведет к возврату различных экземпляров класса MyServiceManager. Я хочу достичь: я использую вызов API для сторонней службы, которая, очевидно, возвращает ответ с различными информационными данными, однако, если пользователь переходит к другому действию/странице, где одни и те же данные, возвращенные ранее из запроса API, необходимо было бы сохранить его как свойство MyServiceManager и получить доступ в случае необходимости от экземпляра класса, если он установлен, а затем посылает другой запрос API каждый раз.Zend Framework 2 Service Manager

Если это возможно, я был бы более чем счастлив слушать и учиться!

ответ

3

Жизненный цикл запроса (с использованием mod_php, fastcgi/fpm) обычно препятствует совместному использованию ресурсов. В отличие от языков, работающих на серверах приложений, PHP не имеет встроенного способа совместного использования экземпляров объектов.

Для каждого входящего запроса веб-сервер создает «новый» экземпляр среды выполнения php, выполняет запрос и очищается.

Вы можете использовать APC для сериализации экземпляров объектов или memcache для временного хранения результатов между запросами.

+0

Zend \ Cache обеспечивает удобные адаптеры для различных кэширующих back-end. – timdev

+0

Это то, что касается менеджеров службы Zend, экземпляр сохраняется в каком-то кеше в соответствии с их документацией. К сожалению, это не работает в моем случае. –

+0

Похоже, что вы хотите кэшировать данные, возвращаемые вызовом API, а не экземпляр менеджера службы. –