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?
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();
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
.
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).
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();
}
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'; ?>
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
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.
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