2009-11-17 9 views

Respuesta

24

Cake lanza automáticamente un error de 404 métodos o controladores que faltan. Mientras que en el modo de depuración, este error se presenta en forma de un mensaje de error detallado que contiene las instrucciones, como:

Missing Controller

Error: FooController could not be found.

Error: Create the class FooController below in file: > app/controllers/foo_controller.php

Notice: If you want to customize this error message, create app/views/errors/missing_controller.ctp

En el modo de producción (debug = 0) el mensaje sólo se parece a esto:

Not Found

Error: The requested address '/foo' was not found on this server.

Estas páginas de error se definen en cake/libs/view/errors/. Como dice el mensaje en el modo de depuración, puede crear sus propias páginas de error personalizadas (usando el mismo nombre que las del directorio cake/) en app/views/errors/.

Si desea ejecutar una función personalizada en los errores, lo mejor será ponerlo en el controlador AppError como se describe en Error Handling.

+0

Estoy tratando de averiguar cómo tener una sola página 404 en lugar de páginas/404, y muchas páginas de error diferentes para modelos, controladores, acciones, vistas, etc. perdidos ... – davethegr8

+6

Crea tu página personalizada 404 en 'app/views/errors/error404.ctp' y listo. Como se dijo anteriormente, en el modo de depuración recibirá más errores detallados, mientras que en el modo de producción, todos los errores de 'Falta X' se mostrarán como error 404 con 'error404.ctp'. – deceze

+1

Ah, ya veo. No me di cuenta de que error404.ctp manejaría * todos * los errores. – davethegr8

0

¿Está en el controlador cuando intenta redireccionar a la página de error 404?

Bueno, si ese es el caso, se puede caminar alrededor del problema como este:

copiar y pegar el diseño de error (error404.ctp) desde el directorio de la biblioteca central de la torta en el suyo app/views/errores/

A continuación, agregue la siguiente línea siempre que encuentre un error dentro de un controlador.

$this->cakeError('error404',array(array('url'=>'/'))); 

Ah, otra manera de manejar esto es editar el archivo routes.php en app/config

CakePHP Official site Routes-Configuration

no tengo una copia de trabajo de CakePHP en el momento, por lo Simplemente describiría la lógica básica aquí (lo que puede hacer dentro del archivo routes.php)

Redirigir el tráfico con patrones de URL específicos (por ejemplo, http://yourwebsite/validController/validFunction/validParam) a sus correspondientes destinos, respectivamente. Redirige todo el resto del tráfico (controlador faltante, modelo, vista, etc.) a la página 404.

Espero que ayude :)

10

Paso 1: En app_controller.php añadir dos funciones

function _setErrorLayout() { 
    if ($this->name == 'CakeError') { 
     $this->layout = 'error'; 
    }  
}    

function beforeRender() { 
     $this->_setErrorLayout(); 
    } 
} 

Paso 2: En views\layouts\ crear error.ctp contiene echo $ content_for_layout;

paso: 3 En views\errors\ hacen missing_action.ctp y personalizar la página como sea necesario mi código PHP fue:

echo $html->image('404-not-found-1-3.jpg'); 
0

Por favor, añada una clase PostController.php no post_controller.php en la carpeta app/controlador. Simplemente significa que tienes que crear como su nombre de clase.

+1

Cuando se creó esta pregunta (¡en 2009!), El estándar era subrayado en minúscula. – davethegr8

Cuestiones relacionadas