ZF2应用程序 - 每次触发的Dispatch错误事件

时间:2016-02-23 08:57:05

标签: zend-framework zend-framework2

我正在使用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中的代码不正确吗?

1 个答案:

答案 0 :(得分:0)

<强>解决!

原因是浏览器自动请求/favicon.ico并且不可用: - )