在CakePHP中处理错误时设置页面标题

时间:2012-08-31 07:07:35

标签: cakephp cakephp-2.0

在处理像404这样的错误时,我需要将页面标题从默认的“错误”更改。所以我需要将我的标题放在变量$ title_for_layout中作为我的布局。我尝试通过更改app / Config / core.php中的配置并在控制器中设置页面标题来创建自定义错误处理功能

Configure::write('Error.handler', function($code, $description, $file = null, $line = null, $context = null) {
     $this->set('title_for_layout', 'Vyskytla sa chyba');
});

正如我所料,我得到了一个PHP错误(第59行是代码示例中的第二行)

Fatal error: Using $this when not in object context in /var/www/web/app/Config/core.php on line 59

那么我如何设置default.ctp布局的标题呢? 感谢。

1 个答案:

答案 0 :(得分:3)

在CakePHP 2.0中,您可以尝试以下代码来实现您所需的相同功能。

试试这个:

/app/Config/core.php

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

Configure::write('Exception', array(
        'handler' => 'ErrorHandler::handleException',
        'renderer' => 'AppExceptionRenderer',
        'log' => true
));

/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';
            $this->set('title_for_layout', 'Vyskytla sa chyba'); 
    }
}

/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'));
    }
}

/app/View/Errors/error404.ctp

<div class="inner404">
    <h2>404 Error - Page Not Found</h2>
</div>

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

参考:CakePHP 2.0 - How to make custom error pages?

For&lt; CakePHP 2.x:

如果您在app / views / errors中创建了一个客户错误页面视图,那么在 你可以使用的错误视图页面上的php部分:

$this->setLayout("Title for the error page here");

然后,当您看到错误页面时,它将显示您的标题。再说一遍 如果您设置自定义错误页面。

这是另一种方法,可以做同样的事情。

// Create an error.php file in your /app folder with the following code:

<?php
class AppError extends ErrorHandler {
    function error404($params) {
            $this->controller->layout = "error";
            $this->set('title_for_layout', 'Vyskytla sa chyba');
            parent::error404($params);
    }
}
?>