Ho letto che la classe AppError ora è compatibile con le versioni precedenti e che dovrebbero essere utilizzate le eccezioni. Come si fa a creare pagine di errore personalizzate per cose come errori 404 o errori completamente personalizzati?CakePHP 2.0 - Come creare pagine di errore personalizzate?
risposta
Prova questa:
/app/Config/core.php
Eccezione rendere necessità di impostare come AppExceptionRender
. Esempio:
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/Vista/Errori/error404. ctp
<div class="inner404">
<h2>404 Error - Page Not Found</h2>
</div>
Inserirlo dove necessario: throw new NotFoundException();
È possibile creare CustomErrorPages
o Exeptions
semplicemente creando un errore class
che si sta per mostrare. Questa classe deve estendere CakeExeption
. Quindi costruisci il tuo exeptionlogic e il tuo set. Ora puoi solo throw new <YourExeptionClass>()
e verrà visualizzato un errore.
Documentazione: CakeExceptions
Ma quando dovrei lanciare quell'errore per un 404? Voglio dire, come si personalizza ora la pagina 404 dell'app? – BadHorsie
Per personalizzare il contenuto di una pagina di errore 404 e non è necessaria la logica personalizzata, è sufficiente modificare il contenuto di app/View/Errors/error400.ctp
.
Questo sembra non essere documentato correttamente da nessuna parte.
Grazie a voi signore !! –
Lanciare un'eccezione è sufficiente per caricare questa pagina di errore - 'gettare nuovo NotFoundException();' –
Hai bisogno di più upvotes .. prendi il mio;) – Karma
Creare un layout con nome 404 o nulla e utilizzare controller app
function _setErrorLayout() {
if ($this->name == 'CakeError') {
$this->layout = '404';
}
}
function beforeRender() {
$this->_setErrorLayout();
}
Se sei solo cercando di usare un altro layout posto di quella predefinita, basta aggiungere $this->layout = 'your_error_layout';
all'interno del vostro error400.ctp (o qualsiasi altra pagina di errore creata in Visualizza/Errori).
La risposta accettata non è l'opzione migliore perché reindirizza l'url del browser a http://example.com.br/error/error404
e l'utente non può seguire quale pagina ha inserito per generare questo errore.
Il modo migliore per gestire questa situazione è di file edit on View/Errors/error400.ctp
, in modo che quando si immette un URL non trovato come http:example.com/crazy-wrong-url
, il browser può mantenere questo URL, ma rendere il contenuto del file error400.ctp
che si modifica.
Se si desidera modificare il layout che la vista sarà reso è possibile digitare questo nella vostra vista <?php $this->layout = 'error'; ?>
aveva scoperto oggi che è possibile ottenere il codice nel file di excpetion CTP utilizzando $error->getCode()
(in CakePHP 2.x, almeno).
Il $error
è stato Cake mette l'oggetto eccezione ...
Ora dovresti essere in grado di modificare il contenuto della tua vista con un blocco condizionale if/else
, basato su questo valore.
Inoltre, per farlo funzionare, è necessario specificare il renderer Exception come 'AppExceptionRenderer' nel file core.php. –
Grazie a @ JonathanCairns, ho dimenticato di menzionare questa sfumatura. Aggiunto all'esempio di codice. –
Grazie, questo funziona. Se si desidera personalizzare solo il contenuto della pagina e non è necessaria la logica personalizzata, è sufficiente omettere la creazione di un controller erros designato e reindirizzare al controller di pagina nel proprio AppExceptionRenderer. – bfncs