Matoha
Matoha

Reputation: 88

Set page title when handling errors in CakePHP

I need to change page title from default "Error" when handling errors like 404. So I need to put my the title in the variable $title_for_layout for my Layout. I tried to create custom error handling function by changing configuration in app/Config/core.php and setting the page title as in controllers

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

As I expected, I got a PHP error (line 59 is the second line in the code sample)

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

So how I can set the title for my default.ctp layout? Thanks.

Upvotes: 2

Views: 2805

Answers (1)

Arun Jain
Arun Jain

Reputation: 5464

In CakePHP 2.0, you can try the following code to achieve the same you needed.

Try this:

/app/Config/core.php

Exception render need to set as an AppExceptionRender. Example:

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>

Insert it where you need: throw new NotFoundException();

Ref: CakePHP 2.0 - How to make custom error pages?

For < CakePHP 2.x:

If you create a custome error page view in app/views/errors then in a php section on that error view page you can use:

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

Then when you see the error page, it will have your title. Again, that is if you set a custom error page.

Here is another way to do the same you needed.

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

Upvotes: 3

Related Questions