0

我在 Zend 应用程序中有很多模块。每个模块都会有错误和异常,对吧?所以我在应用程序模块中创建了错误页面,它可以工作。

但是,在其他模块中,它们不能使用错误页面。那么我应该怎么做才能重用错误页面呢?

这是module.config.php应用程序模块中的文件:

return array(
    ...,
    'controllers' => array(
        'invokables' => array(
            'Application\Controller\Index' => 'Application\Controller\IndexController'
        ),
    ),
    'view_manager' => array(
        'display_not_found_reason' => true,
        'display_exceptions'       => true,
        'doctype'                  => 'HTML5',
        'not_found_template'       => 'error/404',
        'exception_template'       => 'error/index',
        'template_map' => array(
            'layout/layout'           => __DIR__ . '/../view/layout/layout.phtml',
            'application/index/index' => __DIR__ . '/../view/application/index/index.phtml',
            'error/404'               => __DIR__ . '/../view/error/404.phtml',
            'error/index'             => __DIR__ . '/../view/error/index.phtml',
        ),
        'template_path_stack' => array(
            __DIR__ . '/../view',
        ),
    ),
);

当我使用以下代码手动返回 HTTP 404 响应时,会出现问题:

if ( $information == null ) {
    $response = $this->getResponse();
    $response->setStatusCode(404);
    return $response;
}

但是,当我访问像http://example.com/something-do-not-exist这样的非法资源时。我将进入 404 错误页面,但有异常The requested URL could not be matched by routing.

4

3 回答 3

1

我通过以下代码解决了这个问题:

if ( $information == null ) {
    return $this->notFoundAction();
}

这会将您重定向到全局错误页面。

于 2014-02-07T10:05:08.757 回答
0

为什么其他模块不能使用错误页面?

无论如何,有不止一种方法可以做到这一点;)

例如,您可以在 template_map 中为您想要的每个错误页面定义多个名称。

于 2014-02-07T08:44:06.963 回答
0

您列出的配置是在应用程序模块中定义的,但它并不特定于该模块。

这是因为在应用程序引导期间,每个都module.config.php合并到一个配置数组中(使用array_merge_recursive()。这是您可以使用的配置$serviceManager->get('Config');

因此配置对应用程序来说是全局的,所有错误(异常)都应该使用相同的错误模板 ( application/view/error/index.phtml)。

但是请记住,模块的加载顺序很重要;因为最后加载的模块将始终覆盖现有配置。

于 2014-02-07T08:44:59.047 回答