Мы используем zend framework 2 для нового приложения, я хотел бы иметь одну и ту же систему ведения журнала Rails или аналогичную, я бы хотел иметь журнал для каждого запроса, можно сделать это в Zend?
Это зависит от того, что вы хотите регистрировать. Если это только журнал доступа, вы должны попытаться использовать журнал веб-сервера. Журналы из Apache / nginx / IIS и т. Д. Работают лучше, чем вы достигнете в своем приложении ZF2.
Если вам нужно войти в приложение ZF2, у вас есть два варианта. Первый вариант – при bootstrap
. Это один из самых ранних вариантов, который вы можете использовать, поэтому, вероятно, лучше. Однако вы также можете посмотреть route
или dispatch
. Эти два события вызываются во время фазы «запуска» приложения. С этими событиями у вас есть, например, доступ к маршруту, и, следовательно, вы знаете (или нет), если ваш запрос соответствует любому контроллеру (или если у вас нет совпадения, это 404).
Некоторые примеры. Предположим, у вас есть журнал, настроенный в ServiceManager
под ключом logger
. Затем, чтобы войти в bootstrap
:
namespace Application; class Module { public function onBootstrap($e) { $app = $e->getApplication(); $sm = $app->getServiceManager(); $logger = $sm->get('logger'); $logger->debug('Log here!'); } }
Или, например, если вы ждете route
, вы присоедините слушателя к событию route
:
namespace Application; use Zend\Mvc\MvcEvent; use Zend\Mvc\Router\RouteMatch; class Module { public function onBootstrap($e) { $app = $e->getApplication(); $em = $app->getEventManager(); $sm = $app->getServiceManager(); $logger = $sm->get('logger'); $em->attach(MvcEvent::EVENT_ROUTE, function($e) use ($logger) { $match = $e->getRouteMatch(); // No route, this is a 404 if (!$match instanceof RouteMatch) { return; } $logger->debug(sprintf( 'Route event with route %s', $match->getMatchedRouteName() )); }); } }
вnamespace Application; use Zend\Mvc\MvcEvent; use Zend\Mvc\Router\RouteMatch; class Module { public function onBootstrap($e) { $app = $e->getApplication(); $em = $app->getEventManager(); $sm = $app->getServiceManager(); $logger = $sm->get('logger'); $em->attach(MvcEvent::EVENT_ROUTE, function($e) use ($logger) { $match = $e->getRouteMatch(); // No route, this is a 404 if (!$match instanceof RouteMatch) { return; } $logger->debug(sprintf( 'Route event with route %s', $match->getMatchedRouteName() )); }); } }
Похоже, вы могли прикрепить слушателя к событию dispatch
в Zend\Mvc\Application
.
Для справки, Роб Аллен создал удобный список событий ZF2 .