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

时间:2013-03-29 09:47:02

标签: php zend-framework2 zend-framework-modules zend-log

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

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

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

提前致谢!

类似的问题:Log each request in ZF2

2 个答案:

答案 0 :(得分:3)

  

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

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

从这个角度来看,您可以将它放在一个模块中,在bootstrap上生成UUID。要以方便的方式使其在站点范围内可用,请将该值设置为服务,然后可以从服务管理器的任何位置获得该值。

public function onBootstrap(EventInterface $e) {
    $sm = $e->getApplication()->getServiceManager();
    $uuid = isset($_SERVER['UNIQUE_ID']) ? $_SERVER['UNIQUE_ID'] : yourUUIDGeneratingMethod();
    $sm->setService('UUID', $uuid);
}

答案 1 :(得分:0)

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