Si bien podemos definir una página personalizada para los errores a veces esto no es suficiente, hay casos en los que podemos dar otras opciones al usuario y por tanto debe llevar un manejo diferente y aquí es donde entra poder hacer dicho manejo de los errores directamente en los controladores.
Manejo de errores en el controlador
Como mencionamos al inicio podemos establecer un manejo personalizado de errores a nivel general, sin embargo hay situaciones que ameritan un caso especial, es por ello que podemos habilitar el manejo de errores dentro de los controladores.
En la siguiente imagen vemos cómo podemos aplicar el manejo de errores directamente contra una acción del controlador:
Aquí podemos fijarnos que la primera línea definimos el manejador de errores y le decimos a través de un atributo el tipo de error que debe esperar, luego le decimos que vista debe invocar cuando ocurre, finalmente definimos la acción de nuestro controlador normalmente.
Ahora si lo que realmente necesitamos es que todos los errores de ese tipo sean enviados a esa vista que definimos, no vale la pena copiar el mismo código una y otra vez por cada acción que pueda verse afectada, para ello podemos definir el manejo de errores para todo el controlador como vemos en la siguiente imagen:
Si somos observadores notaremos que es la misma estructura que acabamos de ver, la única diferencia es que en vez de aplicar el manejador antes de una acción lo estamos haciendo justo antes del controlador, con lo que las acciones contenidas del controlador caen bajo el alcance o el ámbito de nuestro manejador de errores personalizado.
En la vista que definamos podemos decidir entre mostrarle un mensaje al usuario o tal vez presentar algunas acciones que pueda realizar como por ejemplo enviar un mensaje de reporte o tal vez devolverlo a que repita su acción nuevamente, todo esto dependiendo de nuestros intereses.
Con esto hemos finalizado este tutorial, hemos aprendido a generar un manejo mucho más personalizado de los errores, donde podemos capturar diferentes errores según las acciones o incluso por controladores.