Php ZF3是否可以记录未捕获的异常?
因为在另一个话题中回答是不礼貌的,所以我再次提出与此话题相关的问题: 有人说,您可以用这种方式记录任何未捕获的异常,但未捕获的异常不是会退出由PHP完成的Web服务器的进一步运行吗?我不知道这是什么,或试图做什么Php ZF3是否可以记录未捕获的异常?,php,zend-framework,zend-framework3,Php,Zend Framework,Zend Framework3,因为在另一个话题中回答是不礼貌的,所以我再次提出与此话题相关的问题: 有人说,您可以用这种方式记录任何未捕获的异常,但未捕获的异常不是会退出由PHP完成的Web服务器的进一步运行吗?我不知道这是什么,或试图做什么 public function onBootstrap(MvcEvent $e) { $eventManager = $e->getApplication()->getEventManager(); $moduleRouteList
public function onBootstrap(MvcEvent $e)
{
$eventManager = $e->getApplication()->getEventManager();
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
/**
* Log any Uncaught Exceptions, including all Exceptions in the stack
*/
$sharedManager = $e->getApplication()->getEventManager()->getSharedManager();
$sm = $e->getApplication()->getServiceManager();
$sharedManager->attach('Zend\Mvc\Application', 'dispatch.error',
function($e) use ($sm) {
if ($e->getParam('exception')){
$ex = $e->getParam('exception');
do {
$sm->get('Logger')->crit(
sprintf(
"%s:%d %s (%d) [%s]\n",
$ex->getFile(),
$ex->getLine(),
$ex->getMessage(),
$ex->getCode(),
get_class($ex)
)
);
}
while($ex = $ex->getPrevious());
}
}
);
未捕获的异常是否会退出由PHP完成的Web服务器的进一步运行
不,未捕获异常仅在标准PHP设置下停止处理当前请求,可以是mod PHP、fpm或cgi。Zend\Mvc在调度过程中捕获所有异常,并将它们提供给“dispatch.error”处理程序(您发布的代码就是这样一个处理程序,它记录异常和链中以前的所有异常)。因此,这个异常并不是完全没有问题。好的,谢谢你的解释。因此,如果我理解正确,我需要配置我的PHP设置,使其不会在未捕获的异常中退出,而是在onBootstrap()中使用此代码当出现未捕获异常时,它仍然存在。«因此,如果我理解正确,我需要配置我的PHP设置,使其不会在未捕获异常时退出»-除非您使用类似PHP pm或ReactPHP的东西,否则您不需要任何特定的配置。«但在我的onBootstrap()中使用此代码时,当出现未捕获的异常时,它仍然存在»-没有足够的信息得出结论。在这种情况下,Zend\Mvc中很可能有一些标准处理程序显示了一些错误消息。我只在视图中启用了它,但即使视图没有显示它,它也会退出。所以我很好奇代码示例如何能够或者能够抓住这一切。