我正在使用Zend-Framework2,我想记录有关请求的信息。并不是所有的服务器都提供$_SERVER‘’UNIQUE_ID‘,所以我想生成自己的$_SERVER’‘UNIQUE_ID’(格式参见http://en.wikipedia.org/wiki/Universally_unique_identifier )。
在ZF2中,所有操作都在模块中完成,但我想创建一个应用程序范围的变量或常量,其中包含惟一的ID。我可以将其添加到index.php中,但我认为这不是可行的方法……另一种选择是,唯一请求id的生成是在调用的模块的onBootstrap方法中完成的,但是我重复了一遍,我认为这是不可取的。
理想情况下,我应该将生成UUID并将其作为应用程序范围的变量/常量添加的代码放在哪里?
提前感谢!
类似的问题:Log each request in ZF2
发布于 2013-03-29 21:37:25
另一种选择是,唯一请求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-29 18:16:25
您可以将应用程序范围的变量添加到config/autoload/global.php中。(然而,我认为所有的配置数组在页面加载过程中都被合并了。因此其他配置也应该可以工作。)对于UUID生成器,我建议将一个名为ProjectServices的模块放入供应商文件夹中,并为uuid generate (Ex.vendor\ProjectServices\src\ProjectServices\Service\UUIDGenerate.php)到那里面。您可以根据需要在该文件夹中定义更多服务,如全局记录器。
https://stackoverflow.com/questions/15700838
复制相似问题