ZF2应用程序范围的var(自定义唯一请求id)


ZF2 application wide var (custom unique request id)

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

在ZF2中,一切都在模块中完成,但我想创建一个应用程序范围的变量或常量,其中包含唯一的ID。我可以把它添加到index.php中,但我认为这不是办法。。。另一种选择是,在被调用的模块的onBootstrap方法中生成唯一的请求id,但随后我重复了一遍,我认为这是不可取的。

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

提前感谢!

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

另一种选择是,在被调用的模块的onBootstrap方法中生成唯一的请求id,但随后我重复了一遍,我认为这是不可取的。

我认为你误解了这里的模块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);
}

你可以在config/autoload/global.php中添加应用程序范围的变量,我建议将一个名为ProjectServices的模块放入vendor文件夹中,并在其中定义uuid生成服务(例如vendor''ProjectServices''src''ProjectServices ''service''UUIDGenerate.php(。您可以根据需要在该文件夹中定义更多的服务,如全局记录器。