CakePHP 2.0 - 如何制作自定义错误页面?

Bad*_*sie 31 php cakephp http-status-code-404 cakephp-2.0

我读到AppError类现在是为了向后兼容,应该使用Exceptions.如何为404错误或完全自定义错误等内容创建自定义错误页面?

And*_*kov 46

试试这个:

/app/Config/core.php

异常渲染需要设置为AppExceptionRender.例:

Configure::write('Exception', array(
        'handler' => 'ErrorHandler::handleException',
        'renderer' => 'AppExceptionRenderer',
        'log' => true
));
Run Code Online (Sandbox Code Playgroud)

/app/Controller/ErrorsController.php

class ErrorsController extends AppController {
    public $name = 'Errors';

    public function beforeFilter() {
        parent::beforeFilter();
        $this->Auth->allow('error404');
    }

    public function error404() {
        //$this->layout = 'default';
    }
}
Run Code Online (Sandbox Code Playgroud)

/app/Lib/Error/AppExceptionRenderer.php

App::uses('ExceptionRenderer', 'Error');

class AppExceptionRenderer extends ExceptionRenderer {

    public function notFound($error) {
        $this->controller->redirect(array('controller' => 'errors', 'action' => 'error404'));
    }
}
Run Code Online (Sandbox Code Playgroud)

/app/View/Errors/error404.ctp

<div class="inner404">
    <h2>404 Error - Page Not Found</h2>
</div>
Run Code Online (Sandbox Code Playgroud)

将其插入您需要的位置: throw new NotFoundException();

  • 此外,要使其工作,您需要在core.php文件中将Exception渲染器指定为"AppExceptionRenderer". (2认同)

bfn*_*ncs 40

要自定义404错误页面的内容而不需要自定义逻辑,只需编辑内容即可app/View/Errors/error400.ctp.

这似乎没有在任何地方正确记录.


use*_*931 7

如果您只想使用其他布局而不是默认布局,只需$this->layout = 'your_error_layout';在error400.ctp(或您在View/Errors下创建的任何其他错误页面)中添加.


Cak*_*PHP 5

创建名称为404或任何内容的布局,并在app控制器中使用

function _setErrorLayout() {
    if ($this->name == 'CakeError') { 
        $this->layout = '404';
    }
}
function beforeRender () {
    $this->_setErrorLayout();
}
Run Code Online (Sandbox Code Playgroud)