2

Zend-Framework2 を使用しており、リクエストに関する情報をログに記録したいと考えています。すべてのサーバーが $_SERVER['UNIQUE_ID'] を提供するわけではないので、独自に生成したいと思います (形式については、http://en.wikipedia.org/wiki/Universally_unique_identifierを参照してください)。

ZF2 ではすべてがモジュール内で行われますが、一意の ID を持つアプリケーション全体の変数または定数を作成したいと考えています。それを index.php に追加することはできますが、それは私が思う方法ではありません... 別のオプションは、呼び出されたモジュールの onBootstrap メソッドで一意のリクエスト ID の生成が行われていることです。繰り返しますが、それは望ましくないと思います。

UUID を生成し、それをアプリケーション全体の変数/定数として追加するためのコードをどこに置くのが理想的ですか?

前もって感謝します!

類似の質問: ZF2 で各リクエストをログに記録する

4

2 に答える 2

3

もう 1 つのオプションは、呼び出されたモジュールの onBootstrap メソッドで一意のリクエスト ID の生成が行われていることですが、それを繰り返すことは望ましくないと思います。

ここでモジュールを誤解していると思います。この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 生成用のサービスを定義することをお勧めします (Ex. vendor\ProjectServices\src\ProjectServices\Service\UUIDGenerate.php) をその中に入れます。要件に応じて、そのフォルダーにグローバル ロガーなどのサービスをさらに定義できます。

于 2013-03-29T10:16:25.203 に答える