Contenido del curso

Helper de errores reutilizable en PHP

Resumen

Si trabajas con formularios en PHP y quieres mostrar errores de validación sin repetir lógica en cada vista, un helper de sesiones flash es la solución. Aquí te muestro cómo encapsular el manejo de sesiones, crear funciones reutilizables y dejar tu código más declarativo y profesional.

¿Por qué usar un helper para el sistema de sesiones?

La idea es simple: escribir menos y mostrar más. En lugar de instanciar la clase de sesiones cada vez que necesitas guardar o leer un mensaje flash, centralizas el acceso en una función global que devuelve directamente una instancia de la clase.

Esto evita repetir bloques if en cada vista y mejora la legibilidad. Cuando lees helperSesiones()->getFlash('errores', []) entiendes la intención sin pensar en cómo se construye internamente.

¿Qué es un helper en PHP? Es una función global que envuelve lógica repetitiva para que la llames desde cualquier parte del proyecto sin instanciar clases manualmente.

¿Necesito un patrón Singleton aquí?

No. Aunque el editor sugiera un patrón parecido al de base de datos, la clase de sesiones solo encapsula el arreglo global $_SESSION. Como ese arreglo ya es único en la petición, basta con retornar una instancia nueva cada vez. El estado vive en la sesión, no en el objeto.

¿Cómo guardar e imprimir errores con getFlash y setFlash?

En la acción del controlador guardas los errores con setFlash('errores', $errores). En la vista los recuperas con getFlash('errores', []), pasando un arreglo vacío como valor por defecto para evitar errores cuando no hay nada almacenado.

El flujo queda así:

  • El sistema de validación detecta errores y los guarda en sesión.
  • La vista los obtiene con el helper.
  • Tras leerlos, se eliminan automáticamente para que no persistan en la siguiente petición.

Probado en el navegador, al enviar el formulario con datos inválidos los mensajes aparecen y desaparecen correctamente al recargar.

¿Cómo crear un helper errores que devuelva HTML reutilizable?

Repetir el foreach que arma la lista de errores en cada formulario es ruido innecesario. Mejor encapsulas esa construcción en un helper llamado errores() que retorne el HTML listo.

La lógica interna sigue estos pasos:

  1. Recuperar los errores desde el helper de sesiones con getFlash.
  2. Inicializar una variable $html con la apertura de la lista, por ejemplo '<ul>'.
  3. Recorrer los errores con un foreach y concatenar cada <li> usando .=.
  4. Cerrar la etiqueta </ul> y retornar la cadena completa.

Un detalle típico al escribir esto: si olvidas el punto y coma al final de una línea dentro del foreach, PHP lanza un error de sintaxis. Revisa siempre el cierre de cada instrucción.

Una vez funciona, basta con llamar <?= errores() ?> en cualquier formulario, ya sea de creación, edición o login. Una sola línea sustituye todo el bloque condicional anterior.

¿Cómo concateno HTML en una variable PHP? Usa el operador .= dentro de un bucle. Por ejemplo: $html .= "<li>{$error}</li>";. Así sumas contenido sin sobrescribir lo anterior.

¿Cómo agregar un método remove al sistema de sesiones?

Para cerrar sesión o limpiar datos puntuales, conviene añadir un método remove en la clase de sesiones. En lugar de hacer unset($_SESSION['user']) en distintos archivos, escribes $this->remove('user') y centralizas la lógica.

En el sistema de autenticación, guardar al usuario también se vuelve más limpio:

  • Antes: asignación directa al arreglo global de sesión.
  • Ahora: sesiones()->set('user', $datosUsuario).
  • Para cerrar sesión: sesiones()->remove('user').

Probado el flujo completo, iniciar sesión con credenciales válidas funciona, la navegación mantiene el estado y cerrar sesión elimina al usuario sin tocar $_SESSION directamente.

¿Por qué este código se considera más profesional?

Porque es declarativo: cada línea expresa qué quieres lograr, no cómo se hace por debajo. sesiones()->set(...) o errores() se leen casi como lenguaje natural. Quien revise el proyecto entiende la intención sin abrir la clase base.

Esa es la diferencia entre código que funciona y código que comunica.

¿Qué falta resolver con la función old?

La función old, que recuerda los valores escritos en un formulario tras un error de validación, sigue dependiendo de una variable predefinida. Necesita migrar al mismo sistema de sesiones flash que ya implementaste para los errores.

El reto queda abierto: aplica la misma lógica de getFlash y setFlash para que old recupere los datos del último envío y los muestre en los inputs. ¿Cómo lo resolverías tú? Cuéntame en los comentarios cómo estructurarías el helper antes de ver la siguiente clase.