【问题标题】:Zend Framework 2 Service ManagerZend Framework 2 服务管理器
【发布时间】:2013-06-14 19:46:24
【问题描述】:

有谁知道如何在 2 个操作之间传递自定义 Service Manager 的实例?正如 Zend Framework 2 文档所说,如果 Module.php 类中的“共享”选项未设置为 falseSM 将保留它的实例。但是,通过$manager = $this->getServiceLocator()->get('MyServiceManager'); 在不同的操作中获取服务管理器将返回MyServiceManager 类的不同实例。我想要实现的是:我使用对第三方服务的 API 调用,它显然返回带有各种信息数据的响应,但是,如果用户前往另一个操作/页面,其中先前从 API 请求返回的相同数据是需要将其保存为 MyServiceManager 属性并在需要时从类实例中访问(如果已设置)而不是每次都发送另一个 API 请求会很好。

如果可以的话,我会非常乐意倾听和学习!

【问题讨论】:

    标签: php zend-framework zend-framework2 servicemanager


    【解决方案1】:

    请求生命周期(使用mod_php、fastcgi/fpm)通常会阻止共享资源。与在应用服务器上运行的语言不同,PHP 没有共享对象实例的内置方式。

    对于每个传入的请求,Web 服务器都会创建一个 php 运行时的“新”实例,执行请求并自行清理。

    您可以使用 APC 序列化对象实例或使用 memcache 临时存储请求之间的结果。

    【讨论】:

    • Zend\Cache 为各种缓存后端提供了方便的适配器。
    • 这是关于 Zend 的服务管理器的事情,根据他们的文档,它的实例保存在某种缓存中。不幸的是,它不适用于我的情况。
    • 听起来你想缓存API调用返回的数据,而不是服务管理器实例
    • Tim,服务管理器是发出API请求的类,返回的数据经过解析、过滤并分为setter和getter,当用户到达另一个页面时,之前从API 调用将通过get 魔术方法从服务管理器实例中提取。所以是的,我需要缓存服务管理器的实例。
    • 服务管理器为什么要发出 API 请求?不清楚你的意思,但即使我不知道你的意思,它似乎很愚蠢。 “调用远程 API”与“管理服务”有什么关系(这是您期望“ServiceManager”做的)?
    猜你喜欢
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    相关资源
    最近更新 更多