2

我正在使用 Zend-Framework2,我想记录有关请求的信息。并非所有服务器都提供 $_SERVER['UNIQUE_ID'],所以我想生成自己的(格式请参见http://en.wikipedia.org/wiki/Universally_unique_identifier)。

在 ZF2 中,一切都在模块内完成,但我想创建一个应用程序范围的变量或常量,其中包含唯一 ID。我可以将它添加到 index.php,但我认为这不是要走的路......另一个选择是唯一请求 ID 的生成是在被调用模块的 onBootstrap 方法中完成的,但是我'我重复自己,我认为这是不可取的。

理想情况下,我应该将这段代码放在哪里来生成 UUID 并将其添加为应用程序范围的变量/常量?

提前致谢!

类似问题:在 ZF2 中记录每个请求

4

2 回答 2

3

另一种选择是唯一请求 ID 的生成是在被调用模块的 onBootstrap 方法中完成的,但是我在重复自己,我认为这是不可取的。

我认为您在这里误解了 Ivo 模块。该onBootstrap方法会为每个具有模块的模块调用,而不管最终为当前请求解析和分派哪个模块。这不是路由器找到控制器然后引导该单个模块的情况,它们都是在任何路由发生之前由 ModuleManager 引导的。

从这个角度来看,您可以将它放在一个模块中,在引导程序上生成 UUID。为了以方便的方式使其在站点范围内可用,将该值设置为服务,然后在服务管理器的任何地方都可以使用它。

public function onBootstrap(EventInterface $e) {
    $sm = $e->getApplication()->getServiceManager();
    $uuid = isset($_SERVER['UNIQUE_ID']) ? $_SERVER['UNIQUE_ID'] : yourUUIDGeneratingMethod();
    $sm->setService('UUID', $uuid);
}
于 2013-03-29T13:37:24.683 回答
0

好吧,您可以将应用程序范围的变量添加到 config/autoload/global.php。(但是我认为所有配置数组都在页面加载过程中合并。所以其他配置也应该工作。)对于 UUID 生成器,我建议将一个名为 ProjectServices 的模块放入供应商文件夹并为 uuid 生成定义服务(例如。 vendor\ProjectServices\src\ProjectServices\Service\UUIDGenerate.php) 到那个。您可以根据您的要求在该文件夹中定义更多服务,例如全局记录器。

于 2013-03-29T10:16:25.203 回答