CakePHP 2.0 - jak tworzyć własne strony błędów?

Przeczytałem, że Klasa AppError jest teraz kompatybilna wstecz i że zamiast niej należy używać WYJĄTKÓW. Jak można tworzyć niestandardowe strony błędów dla rzeczy takich jak błędy 404 lub całkowicie niestandardowe błędy?

Author: Jon Cairns, 2012-03-08

7 answers

Spróbuj tego:

/ app / Config / core.php

Render WYJĄTKÓW musi być ustawiony jako AppExceptionRender. Przykład:

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

/ 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>

Wstaw go tam, gdzie potrzebujesz: throw new NotFoundException();

 45
Author: Andrew Kulakov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-14 23:46:49

Aby dostosować zawartość strony błędu 404 i nie potrzebujesz niestandardowej logiki, po prostu Edytuj zawartość app/View/Errors/error400.ctp.

Wydaje się, że nigdzie nie jest to właściwie udokumentowane.
 39
Author: bfncs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-10 15:16:29

Jeśli chcesz używać tylko innego układu zamiast domyślnego , po prostu dodaj $this->layout = 'your_error_layout'; do swojego error400.ctp (lub jakiejkolwiek innej strony błędu, którą utworzysz w obszarze Widok / błędy).

 7
Author: user221931,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-14 12:03:39

Utwórz układ o nazwie 404 lub cokolwiek innego i użyj w kontrolerze aplikacji

function _setErrorLayout() {
    if ($this->name == 'CakeError') { 
        $this->layout = '404';
    }
}
function beforeRender () {
    $this->_setErrorLayout();
}
 5
Author: Cake PHP,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-21 22:19:51

Zaakceptowana odpowiedź nie jest najlepszą opcją, ponieważ przekierowuje adres URL przeglądarki do http://example.com.br/error/error404, a użytkownik nie może śledzić strony, którą wprowadził, aby wygenerować ten błąd.

Lepszym sposobem radzenia sobie z tą sytuacją jest edycja pliku na View/Errors/error400.ctp, więc gdy wprowadzasz nie znaleziony adres URL, taki jak http:example.com/crazy-wrong-url, przeglądarka zachowa ten adres url, ale wyrenderuje zawartość pliku error400.ctp, który edytujesz.

Jeśli chcesz zmienić układ, który będzie renderowany, możesz wpisać go w widoku <?php $this->layout = 'error'; ?>

 2
Author: Daniel Faria,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-18 01:22:56

Możesz utworzyć CustomErrorPages LUB Exeptions, po prostu tworząc class swojego błędu, który się pojawi. Ta klasa musi rozszerzyć CakeExeption. Następnie zbuduj swój exeptionlogic i swój zestaw. Teraz możesz po prostu throw new <YourExeptionClass>() i wyświetli błąd.

Dokumentacja: CakeExceptions

 0
Author: Jonas Millan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-27 13:02:05

Odkrył dzisiaj, że możliwe jest uzyskanie kodu excpetion w pliku ctp za pomocą $error->getCode() (w CakePHP 2.x, co najmniej).

The $error is were Cake stawia obiekt exception...

Teraz powinieneś być w stanie zmienić zawartość widoku za pomocą if/else warunkowego bloku opartego na tej wartości.

 0
Author: Jorge Junior,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-31 21:17:04