我在Zend应用程序中有很多模块。每个模块都会有错误和例外,对吧?所以我在Application模块中创建了错误页面,它可以工作。
但是,在其他模块中,他们无法使用错误页面。那么我该如何重用错误页面?
这是应用程序模块中的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等非法资源时。我将使用例外The requested URL could not be matched by routing.
答案 0 :(得分:1)
我通过以下代码解决问题:
if ( $information == null ) {
return $this->notFoundAction();
}
这会将您重定向到全局错误页面。
答案 1 :(得分:0)
为什么其他模块不能使用错误页面?
无论如何,有多种方法可以做到这一点;)
例如,您可以在template_map中为所需的每个错误页面定义多个名称。
答案 2 :(得分:0)
您列出的配置在应用程序模块中是已定义,但该模块的不特定。
这是因为在应用程序引导期间,每个module.config.php
都是merged together into one configuration array (using array_merge_recursive()
)。这是您可以使用$serviceManager->get('Config');
因此,配置对应用程序是全局的,并且所有错误(例外)都应使用相同的错误模板(application/view/error/index.phtml
)。
但请记住,模块的装载顺序很重要;因为最后加载的模块将始终覆盖现有配置。