He leído que el AppError clase ahora es para la compatibilidad hacia atrás y que las Excepciones deben ser utilizados en su lugar. ¿Cómo se hace para crear páginas de error personalizadas para cosas como errores 404, o completamente personalizado errores?

InformationsquelleAutor BadHorsie | 2012-03-08

7 Comentarios

  1. 46

    Intente esto:

    /app/Config/core.php

    Excepción de procesamiento necesidad de establecer como una AppExceptionRender. Ejemplo:

    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/Errores/error404.ctp

    <div class="inner404">
        <h2>404 Error - Page Not Found</h2>
    </div>

    Insertarlo donde usted necesita: throw new NotFoundException();

    • También, para conseguir que esto funcione, es necesario especificar la Excepción representador como AppExceptionRenderer en el core.php archivo.
    • Gracias @JonathanCairns, se me olvidó mencionar que el matiz. Agrega el código de ejemplo.
    • Gracias, esto funciona. Si sólo desea personalizar el contenido de tu página y no necesita la lógica personalizada, es suficiente para omitir la creación de una designado errores de controlador y redirigir las Páginas de Controlador en su AppExceptionRenderer lugar.
    • Esto ya no funciona para mí en la Torta de 2.4
    • También necesita asegurarse de que la empresa sabe sobre sus ErrorsController controlador. Reemplazar _getController en AppExceptionRenderer. book.cakephp.org/2.0/en/development/…
    • Otra respuesta en esta página solo, es una forma elegante, y cómo CakePHP destinado a ser.
    • He intentado todo lo que ha dicho, pero todavía no se aplican y tengo otros errores como al cliente y otros

  2. 40

    Para personalizar el contenido de un mensaje de error 404-página de error y no necesita la lógica personalizada, basta con editar el contenido de app/View/Errors/error400.ctp.

    Esto no parece ser documentados apropiadamente en cualquier lugar.

    • Gracias cargas señor !!
    • Tirar de una de las excepciones es suficiente para cargar esta página de error – throw new NotFoundException();
    • Necesita más upvotes.. tome la mía 😉
    • Enlaces relevantes (ExceptionRenderer) en documentación para 2.x y documentación para 3.x
    • Y si usted tiene múltiples temas?
  3. 7

    Si estás sólo buscan utilizar otro diseño en lugar de la predeterminada, sólo tiene que añadir $this->layout = 'your_error_layout'; en el interior de su error400.ctp (o cualquier otra página de error de crear en Ver/Errores).

  4. 5

    Crear un diseño con el nombre de 404 o algo y uso en el controlador de app

    function _setErrorLayout() {
        if ($this->name == 'CakeError') { 
            $this->layout = '404';
        }
    }
    function beforeRender () {
        $this->_setErrorLayout();
    }
    • impresionante respuesta 🙂
  5. 2

    La aceptada respuesta no es la mejor opción, ya que redirigir la url de su navegador para http://example.com.br/error/error404 y el usuario no puede seguir en qué página se inputed para generar este error.

    La mejor manera de manejar esta situación es editar el archivo en View/Errors/error400.ctp, por lo que cuando una entrada no se encuentra la url como http:example.com/crazy-wrong-url, el navegador va a mantener esta url, pero muestran el contenido de la error400.ctp archivo que se edita.

    Si quieres cambiar el diseño que la vista va a ser prestados usted puede escribir en su vista <?php $this->layout = 'error'; ?>

  6. 0

    Puede crear CustomErrorPages o Exeptions mediante la creación de un class de su error va a mostrar. Esta clase debe extender CakeExeption. Luego construir su exeptionlogic y su conjunto. Ahora sólo puedo throw new <YourExeptionClass>() y se mostrará un error.

    Documentación: CakeExceptions

    • Pero, cuando iba a tirar ese error para un 404? Me refiero a ¿cómo hace uno para personalizar la aplicación de la página de error 404 ahora?
  7. 0

    Había descubierto el día de hoy que es posible obtener excepción de código en el ctp archivo con $error->getCode() (en CakePHP 2.x, al menos).

    La $error se fueron Pastel la pone el objeto de excepción…

    Ahora usted debería ser capaz de cambiar el contenido de su vista con un if/else bloque condicional, basado en este valor.

Dejar respuesta

Please enter your comment!
Please enter your name here