Aprende a implementar una página de error 500 personalizada para excepciones en el entorno de producción en Symfony 1.4

Implementar una página de error 500 personalizada para excepciones en Symfony 1.4

"Vaya, ocurrió un error", mensaje memorable de excepciones que se muestra en proyectos basados ​​en Symfony 1.4 cuando están específicamente en el entorno de producción . La página de error predeterminada de Symfony es bastante informativa para el usuario, básicamente dice que lo que estaban tratando de hacer no se pudo lograr por una "x" razón. 

Normalmente, no desea mostrar el motivo de la excepción al usuario, solo desea advertirle que algo está fallando, sin embargo, es bastante importante mostrar una página de error que esté relacionada con el diseño de todo su proyecto, eso es por qué en Symfony 1.4 es posible anular la página de error 500 predeterminada por una personalizada. En este artículo, le mostraremos cómo anularlo simplemente creando un nuevo archivo en un directorio específico de su proyecto.

Creación de una página de error 500 personalizada

Para personalizar la página de error 500 utilizada por Symfony en el entorno de producción, deberá crear un nuevo directorio llamado error dentro de la carpeta  /config de toda su aplicación o por nivel de aplicación secundaria, por ejemplo yourproject/config(para una página de error no específica de una aplicación secundaria) o si tienes sub aplicaciones yourproject/apps/<my-app>/config. Dentro de este directorio, solo necesita crear un archivo PHP vacío con el nombre error.html.php. Por ejemplo, en nuestro proyecto tenemos 2 subaplicaciones, sin embargo queremos una sola página de error para ambas, así que colocaremos la plantilla de error en el config/errordirectorio del proyecto:

Symfony 1.4 custom error page

A continuación, solo necesita escribir su plantilla HTMl en el error.html.php, tenga en cuenta que también podrá hacer cosas PHP relacionadas con Symfony 1.4. Por ejemplo, utilizando una página de error 500 de código abierto , el contenido de nuestra plantilla error.html.php podría ser algo como:

<?php // yourproject/config/error/error.html.php ?>
<!DOCTYPE html>
<html lang="en">
    <head>
        <!-- Simple HttpErrorPages | MIT License | https://github.com/AndiDittrich/HttpErrorPages -->
        <meta charset="utf-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1" />
        <title>We've got some trouble | 500 - Webservice currently unavailable</title>
        <style type="text/css">/*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}/*! Simple HttpErrorPages | MIT X11 License | https://github.com/AndiDittrich/HttpErrorPages */body,html{width:100%;height:100%;background-color:#21232a}body{color:#fff;text-align:center;text-shadow:0 2px 4px rgba(0,0,0,.5);padding:0;min-height:100%;-webkit-box-shadow:inset 0 0 100px rgba(0,0,0,.8);box-shadow:inset 0 0 100px rgba(0,0,0,.8);display:table;font-family:"Open Sans",Arial,sans-serif}h1{font-family:inherit;font-weight:500;line-height:1.1;color:inherit;font-size:36px}h1 small{font-size:68%;font-weight:400;line-height:1;color:#777}a{text-decoration:none;color:#fff;font-size:inherit;border-bottom:dotted 1px #707070}.lead{color:silver;font-size:21px;line-height:1.4}.cover{display:table-cell;vertical-align:middle;padding:0 20px}footer{position:fixed;width:100%;height:40px;left:0;bottom:0;color:#a0a0a0;font-size:14px}</style>
    </head>
    <body>
        <div class="cover">
            <h1>Webservice currently unavailable <small>Error 500</small></h1>
            <p class="lead">An unexpected condition was encountered. 
                <br />Our service team has been dispatched to bring it back online.
            </p>
        </div>
    </body>
</html>

Finalmente, borra la caché de tu proyecto Symfony usando:

php symfony cc

Y cada vez que se lanza una excepción en el entorno de producción, verá la página de error personalizada:

Nota

No olvide que para probar la página, deberá estar en el entorno prod (sin frontend_dev.php), no en el entorno dev. De lo contrario, verá siempre el seguimiento de la pila de Symfony.

Custom Error Page Symfony 1.4

Que te diviertas ❤️!


Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores