404路由器在PHP中的应用
我知道如何在实际的/config/routes.php文件中创建响应路由,但是我找不到在哪里更改默认的“Feature dispatcher”错误。我希望在缺少页面/动作控制器时,能够将其路由到我制作的一个漂亮的404页面。这可能吗?是的,您可以利用404路由器在PHP中的应用,php,http-status-code-404,lithium,Php,Http Status Code 404,Lithium,我知道如何在实际的/config/routes.php文件中创建响应路由,但是我找不到在哪里更改默认的“Feature dispatcher”错误。我希望在缺少页面/动作控制器时,能够将其路由到我制作的一个漂亮的404页面。这可能吗?是的,您可以利用limition\core\ErrorHandler实现这一点。请参见默认设置中的代码: 这就是说,如果在Dispatcher::run()期间发生任何异常,请使用layouts/error.html.php布局显示views/\u errors文件
limition\core\ErrorHandler
实现这一点。请参见默认设置中的代码:
这就是说,如果在Dispatcher::run()
期间发生任何异常,请使用layouts/error.html.php
布局显示views/\u errors
文件夹中的development.html.php
模板
因此,您可以更改它--也许您可以检查环境
,看看这是开发环境还是生产环境,并为生产显示不同的模板
如果
$info['exception']->getCode()==404
,您可以切换到专门针对404错误的模板。或者,您应该能够将['code'=>404]
作为第二个参数传递。哦,太棒了!我知道锂电池内置了一些东西,但我仍在学习。多谢各位much@rmarscher-上述代码是否会捕获我的应用程序中的致命错误?我不想显示空白页,而是想执行一些其他活动。我正在尝试定位ErrorHandler::apply在出现致命错误时是否会生效。。。请guide@user269867我认为您需要使用register\u shutdown\u function()来捕获致命错误。当我有时间时,我会用一个例子更新我的回答。请参阅
ErrorHandler::apply('lithium\action\Dispatcher::run', array(), function($info, $params) {
$response = new Response(array(
'request' => $params['request'],
'status' => $info['exception']->getCode()
));
Media::render($response, compact('info', 'params'), array(
'library' => true,
'controller' => '_errors',
'template' => 'development',
'layout' => 'error',
'request' => $params['request']
));
return $response;
});