Cuando trabajas con controladores en PHP, lo más sano es que cada pieza haga una sola cosa. Aislar la lógica de autenticación en una clase dedicada te permite mantener el controlador enfocado en orquestar y redirigir, mientras la validación y el manejo de sesiones viven en su propio espacio. Esto se traduce en código más limpio, mantenible y profesional.
Por qué separar la lógica de autenticación del controlador
Un controlador no debería cargar con la responsabilidad de validar credenciales, gestionar sesiones y además decidir a dónde redirigir al usuario. Cuando todo eso convive en el mismo archivo, cualquier cambio se vuelve riesgoso y el código pierde claridad.
La idea es sencilla: el controlador valida la entrada, llama a la clase de autenticación y, según el resultado, redirige o muestra una vista con errores. Nada más.
¿Qué hace exactamente un controlador en este patrón? Orquesta el flujo y decide la redirección. Recibe la petición, delega la validación y la lógica de negocio a clases especializadas, y devuelve la respuesta correspondiente.
Cómo crear la clase SistemaDeAutenticacion en PHP
El primer paso es generar un archivo nuevo con la clase que centralizará el inicio y cierre de sesión. En lugar de colocarla dentro de middleware, conviene ubicarla directamente en el namespace framework, porque su rol es transversal al sistema [01:00].
Dentro de esta clase vas a mover toda la lógica que antes vivía en el controlador, pero con un cambio importante: trabajar por parámetros explícitos en lugar de recibir el request completo.
Cómo definir el método de inicio de sesión
El método recibe dos strings, email y password, y retorna un boolean. Su única responsabilidad es responder verdadero o falso ante la pregunta: ¿estas credenciales son válidas?
- Consulta al usuario por su email.
- Verifica que la contraseña coincida con la almacenada.
- Retorna
true si todo se cumple, false en caso contrario.
No valida formato, no redirige, no muestra vistas. Esa restricción es justo lo que le da fuerza al diseño.
Cómo definir el método de cierre de sesión
El cierre de sesión sigue el mismo principio: una sola tarea bien hecha. Mueves la lógica original del controlador al nuevo método dentro de SistemaDeAutenticacion y dejas que el controlador se limite a invocarlo [02:15].
Cómo queda el controlador después de refactorizar
El controlador ahora se lee como una receta corta. Primero ejecuta las validaciones de entrada, luego instancia la clase de autenticación y, según la respuesta booleana, decide el siguiente paso.
Para el inicio de sesión, el flujo queda así: creas una nueva instancia con new SistemaDeAutenticacion(), llamas al método de inicio de sesión pasándole los datos, y si retorna true, usas el helper de redirección hacia el inicio. Si retorna false, muestras la vista con los errores.
Para el cierre de sesión la lógica es idéntica en estructura: instancias la clase, llamas al método correspondiente y rediriges. Validar, ejecutar, redirigir: ese es el ritmo.
¿Qué ventaja real aporta separar responsabilidades aquí? Tu controlador pasa de tener decenas de líneas mezcladas a unas pocas instrucciones claras. Si mañana cambias cómo se valida una contraseña, solo tocas la clase de autenticación, no el controlador.
Qué conceptos de programación profesional aplicas con este cambio
Esta refactorización pone en práctica varios principios que vas a encontrar en cualquier proyecto serio de PHP.
- Separación de responsabilidades: cada clase tiene un propósito único y bien definido [03:30].
- Uso de namespace: organizar la clase dentro de
framework la hace localizable y reutilizable.
- Tipado estricto de parámetros y retornos: declarar
string en la entrada y bool en la salida elimina ambigüedad.
- Inyección puntual mediante
new: el controlador instancia lo que necesita en el momento exacto.
- Uso de helpers de redirección: centralizas el cómo se redirige, no lo repites en cada controlador.
Después de aplicar estos cambios, la prueba es directa: entras a la vista de inicio de sesión, ingresas usuario y contraseña, y el sistema responde igual que antes. La diferencia es que ahora la lógica vive donde debe vivir.
¿Has aplicado este tipo de separación en tus proyectos PHP? Cuéntame en los comentarios cómo organizas tus clases de autenticación.