我正在使用Zend Framework 2应用程序并且有一个关于错误处理的奇怪行为。我在Module.php中的代码:
public function onBootstrap(MvcEvent $e)
{
$eventManager = $e->getApplication()->getEventManager();
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
$eventManager->attach(\Zend\Mvc\MvcEvent::EVENT_ROUTE, [$this, 'onPreRoute'], 100);
$eventManager->attach(\Zend\Mvc\MvcEvent::EVENT_DISPATCH_ERROR, [$this, 'handleError']);
}
public function onPreRoute(MvcEvent $e)
{
$serviceManager = $e->getTarget()->getServiceManager();
$router = $serviceManager->get('router');
$router->setTranslator($serviceManager->get('translator'));
}
public function handleError(MvcEvent $e)
{
$error = $e->getParam('error');
file_put_contents('error.log', $error . PHP_EOL, FILE_APPEND);
switch($error) {
case 'error-router-no-match':
$router = $e->getRouter();
$url = $router->assemble([], ['name' => 'home']);
header('Location: ' . $url);
exit;
}
}
正如你所看到的那样,我正在翻译路线。这很好用。但是在每个请求上也会触发调度错误事件。每次都会创建error.log文件。但只有在路径确实不存在的情况下才会执行重定向。我认为这取决于翻译器或我的Module.php中的代码不正确吗?
答案 0 :(得分:0)
<强>解决!强>
原因是浏览器自动请求/favicon.ico并且不可用: - )