404路由器在PHP中的应用

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文件

我知道如何在实际的/config/routes.php文件中创建响应路由,但是我找不到在哪里更改默认的“Feature dispatcher”错误。我希望在缺少页面/动作控制器时,能够将其路由到我制作的一个漂亮的404页面。这可能吗?

是的,您可以利用
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;
});