Широкий var приложения ZF2 (уникальный уникальный идентификатор запроса)

Я использую Zend-Framework2, и я хотел бы регистрировать информацию о запросе. Не все серверы предоставляют $_SERVER['UNIQUE_ID'], поэтому я хотел бы сгенерировать свой собственный (см. Формат http://en.wikipedia.org/wiki/Universally_unique_identifier).

В ZF2 все делается внутри модулей, но я хотел бы создать переменную или константу в масштабе приложения с уникальным идентификатором. Я могу добавить его в index.php, но это не тот путь, я думаю... Другой вариант заключается в том, что генерация уникального идентификатора запроса выполняется в методе onBootstrap вызываемого модуля, но затем я Я повторяюсь, и это не желательно, я думаю.

Где я должен в идеале поместить кусок кода для генерации UUID и добавить его в качестве переменной / константы всего приложения?

Заранее спасибо!

Подобный вопрос: регистрировать каждый запрос в ZF2

2 ответа

Решение

Другой вариант заключается в том, что генерация уникального идентификатора запроса выполняется в методе 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);
}

Ну, вы можете добавить переменную всего приложения в config/autoload/global.php. (Однако я думаю, что все массивы конфигурации объединяются в процессе загрузки страницы. Поэтому другие конфигурации также должны работать.) Для UUID Generator я бы предложил сделать модуль с именем, подобным ProjectServices, в папку поставщика и определить службу для генерации uuid (например, vendor\ProjectServices\src\ProjectServices\Service\UUIDGenerate.php) в это. Вы можете определить дополнительные сервисы, такие как глобальный регистратор, в соответствии с вашими требованиями в эту папку.

Другие вопросы по тегам