2012-03-08 10 views

risposta

45

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();

+2

Inoltre, per farlo funzionare, è necessario specificare il renderer Exception come 'AppExceptionRenderer' nel file core.php. –

+0

Grazie a @ JonathanCairns, ho dimenticato di menzionare questa sfumatura. Aggiunto all'esempio di codice. –

+0

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

0

È 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

+1

Ma quando dovrei lanciare quell'errore per un 404? Voglio dire, come si personalizza ora la pagina 404 dell'app? – BadHorsie

38

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.

+0

Grazie a voi signore !! –

+0

Lanciare un'eccezione è sufficiente per caricare questa pagina di errore - 'gettare nuovo NotFoundException();' –

+1

Hai bisogno di più upvotes .. prendi il mio;) – Karma

4

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(); 
} 
6

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).

2

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

0

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.

Problemi correlati