Quiero tener un diseño diferente para la página 404 no encontrada. ¿Cómo puedo establecer un diseño diferente para esa página?Cakephp: ¿cómo hacer que las páginas de error tengan sus propios diseños?
Respuesta
Savant del IRC me ayudó a salir y él sugiere en el uso de beforeRender(){}
en el app_controller
// Before Render
function beforeRender() {
if($this->name == 'CakeError') {
//$this->layout = 'error';
}
}
CakeError es un cajón de sastre para errores: D
Esta forma más sencilla que conozco es la creación de esta función en su AppController
:
function appError($method, $messages)
{
}
A continuación, puede hacer lo que quiera con el error, muestran sin embargo que usted quiere, o no mostrarlo en absoluto, enviar un correo electrónico, etc. (no estoy seguro de si este método aún es válido)
También existe la opción de crear app_error.php
en la raíz de la aplicación, con class AppError extends ErrorHandler
, que le permite anular todo tipo de errores Pero aún no he hecho esto, así que no puedo contarte más sobre eso.
Consulte cake/libs/error.php y cake/libs/object.php y, por supuesto, The Book para obtener más información.
Editar: se olvidó de mencionar, una vez que usted cogió el error, no hay nada que le impida a - por ejemplo - almacenar el error en la sesión, redirigir a su "controlador de gestión de errores", y luego mostrarlo en su controlador sin embargo usted quiere.
muchas gracias: D –
mejor crear un archivo en su aplicación error.php carpeta
class AppError extends ErrorHandler {
function error404($params) {
$this->controller->layout = 'error';
parent::error404($params);
}
}
para que pueda evitar la prueba si a cada página hacen que la solución de sabios introduce
En CakePHP 2.2.2 He cambiado la ExceptionRenderer en core.php con mi propia, así:
app/config/core.php:
Configure::write('Exception', array(
'handler' => 'ErrorHandler::handleException',
'renderer' => 'MyExceptionRenderer', // this is ExceptionRenderer by default
'log' => true
));
app/lib/error/MyExceptionRenderer. php:
App::uses('ExceptionRenderer', 'Error');
class MyExceptionRenderer extends ExceptionRenderer {
protected function _outputMessage($template) {
$this->controller->layout = 'error';
parent::_outputMessage($template);
}
}
No se puede votar lo suficiente, supera mi antiguo enfoque de duplicar cada vista de error y configurar el diseño en 'error' en la parte superior. – Matthew
Mi solución para CakePHP 2,3
Cambio t el ExceptionRenderer en core.php para usar tu propio renderizador.
app/config/core.php:
Configure::write('Exception', array(
'handler' => 'ErrorHandler::handleException',
'renderer' => 'MyExceptionRenderer',
'log' => true
));
app/lib/error/MyExceptionRenderer.php:
App::uses('ExceptionRenderer', 'Error');
class MyExceptionRenderer extends ExceptionRenderer
{
/**
* Overrided, to always use a bare controller.
*
* @param Exception $exception The exception to get a controller for.
* @return Controller
*/
protected function _getController($exception) {
if (!$request = Router::getRequest(true)) {
$request = new CakeRequest();
}
$response = new CakeResponse(array('charset' => Configure::read('App.encoding')));
$controller = new Controller($request, $response);
$controller->viewPath = 'Errors';
$controller->layout = 'error';
return $controller;
}
}
La ventaja de este enfoque es que asegura excepciones emitidas desde AppController no causa un bucle sin fin al representar la excepción. Fuerza una representación básica del mensaje de excepción cada vez.
Solo necesita hacer cambios de diseño en su archivo error400.ctp en/app/View/Errors/error400.CTP
Abrir el archivo y configurar la presentación por
<?php $this->layout=''; //set your layout here ?>
- 1. CakePHP, extensiones y diseños
- 2. Creando sus propios permisos
- 3. Usando SQL, ¿cómo actualizo las filas, usando sus propios valores?
- 4. CakePHP 2.0 - ¿Cómo crear páginas de error personalizadas?
- 5. RailsAdmin - Personalización de sus propios filtros
- 6. CakePHP: ¿incluye CSS basado en páginas específicas?
- 7. Protección del código de sus propios desarrolladores
- 8. Cómo hacer que PagerAdapter cargue todas las páginas
- 9. ¿Cómo hacer que las páginas php/html sean seguras/https?
- 10. ¿Cómo usan las aplicaciones de Google App-Engine las personas con sus propios dominios?
- 11. do interfaces pertenecen a sus propios archivos
- 12. ¿Cómo hacer que múltiples vistas tengan el mismo ancho?
- 13. ¿Cómo puedo hacer que las líneas de envoltura de Visual Studio tengan 80 caracteres?
- 14. Incluyendo actividades de Android (y sus diseños) en archivos JAR
- 15. ¿Cómo puedo hacer que las 4 esquinas de mi div tengan asas redimensionables con jQuery?
- 16. Cómo hacer que todas las entidades tengan acceso: interno en lugar de público en EDMX?
- 17. Defina sus propios mensajes de retroalimentación en Wicket
- 18. Hacer que los hilos tengan el mismo número de timeslices
- 19. ¿Cómo limito las aplicaciones de PHP a sus propios directorios y su propio php.ini?
- 20. Complementos MEF con sus propios archivos de configuración?
- 21. ¿Cómo eliminar auth del controlador de páginas en CakePHP?
- 22. CanCan - Cómo permitir que los usuarios actualicen y eliminen solo sus propios objetos
- 23. cakephp: cómo hacer que NOW() funcione en condiciones de búsqueda?
- 24. Tabla vs diseños basados en CSS para páginas web
- 25. ¿Cómo hacer que CakePHP redirija a una acción/controlador diferente?
- 26. ¿Cómo hacer que las páginas 404 no escriban un registro de errores?
- 27. ¿Mi clase debe suscribirse a sus propios eventos públicos?
- 28. Cómo hacer que los divs internos flotantes tengan la misma altura que el div más alto
- 29. ¿Cómo hacer que las colas RabbitMQ conmuten por error?
- 30. Múltiple UIAlertView; cada uno con sus propios botones y acciones
Este método ya no es válida con CakePHP 2.x. Y no tengo ni idea de cómo hacerlo ahora ... lol –
Puedo confirmar que este método funciona con Cake 2.2.1. – bancer
No confirmo en Cake 2.2.1. Depuro $ this-> layout beforeRender, obtengo el 'public_layout' esperado, pero todavía se muestra en default.ctp. DEPURAR está establecido en 0. –