CakePHP3-自定义页面错误404不起作用


CakePHP3 - Custom page error 404 not working

我按照教程操作http://book.cakephp.org/3.0/en/development/errors.html#exception-渲染器,但它不工作,并显示空白页。

在config/bootstrap.php 中

use App'Error'AppError;
$errorHandler = new AppError();
$errorHandler->register();

在src/Error/AppError.php 中

<?php
namespace App'Error;
use Cake'Error'BaseErrorHandler;
class AppError extends BaseErrorHandler
{
    public function _displayError($error, $debug)
    {
        return 'There has been an error!';
    }
    public function _displayException($exception)
    {
        return 'There has been an exception!';
    }
    public function handleFatalError($code, $description, $file, $line)
    {
        return 'A fatal error has happened';
    }
}

我在src/Template/Layout/my_error.ctp中创建了my_error.ctp。在我的src/Template/error/error404.ctp中,我将布局更改为my_error-ctp。

$this->layout = 'my_error';

最后,在我的控制器

use Cake'Network'Exception'NotFoundException;
$staff = $this->Staff->find()->where(['Staff.StaffId = '=> $id, 'Staff.PartnerId = ' =>$this->partnerId])->first();
if (empty($staff)) {
    throw new NotFoundException(__('Staff not found'));
}

每当遇到空白页面,启用调试模式时,请再次访问URL,并检查错误日志。

然而,这种情况下的问题很可能是文档不正确/误导,因为示例应用程序错误根本不会起到任何作用。前缀为_的方法是ment为protected,让它们返回一些东西没有效果,而handleFatalError是ment返回布尔值。

只要看看Cake'Error'BaseErrorHandler的源和核心错误处理程序Cake'Error'ErrorHandler,您要覆盖的方法就是生成输出!

您可能想在GitHub上报告这一问题。

如果您只想创建一个自定义4xx错误页面,那么您只需要相应地编辑src/Template/Error/error400.ctp模板。

我发现了我的错误。:(因为在bootstrap.php中,我在文件末尾复制了以下代码。因此Cake无法理解。请关闭此问题。感谢您的支持。

use App'Error'AppError;
$errorHandler = new AppError();
$errorHandler->register();