¿Te enfrentas al desafío de representar Routing en una aplicación orientada a objetos en PHP? Routing es una parte central de cualquier aplicación web, ya que decide cómo las URLs entrantes se asignan a los bloques lógicos correspondientes, es decir, controladores y sus acciones. Esta guía te ayudará a entender y implementar el proceso de routing en PHP, pasando por la asignación de controladores y acciones de manera detallada.
Principales conclusiones
- El routing permite la asignación de solicitudes URL entrantes a métodos específicos de los controladores.
- La nomenclatura de controladores y métodos sigue ciertas convenciones de nomenclatura para garantizar la consistencia.
- Con PHP Reflection se puede verificar si el método específico del controlador existe antes de ser llamado.
- Los parámetros deben ser procesados cuidadosamente y pasados a sus métodos correspondientes en un array asociativo.
Guía paso a paso
Paso 1: Crear estructura de directorios y namespace
Primero, crearás un nuevo directorio llamado Controller, donde colocarás tus clases de controladores. Es importante organizar las clases en namespaces significativos. Por ejemplo:

A continuación, defines el namespace para el controlador. Esto podría verse de la siguiente manera:
Paso 2: Definir la clase del controlador
En este paso, crearás una clase para tu controlador deseado. Llamémoslo UploadController. Para ello, necesitarás algunas configuraciones básicas para inicializar la clase. Por ejemplo:

Es importante asegurarte de que todos los nombres de los controladores estén formateados en minúsculas para evitar confusiones posteriores. Esto no solo ayuda a la claridad, sino que también te permite mantener el proceso de estandarización en tu aplicación.
Paso 3: Crear instancia del controlador
Ahora crearás una instancia de tu controlador. Esto se hace típicamente a través de un formato de cadena que incluye el nombre completo de la clase, incluido el namespace. Por ejemplo:

Para que se implemente de manera sencilla en la lógica posterior, verifica si la clase existe antes de continuar con otros pasos. Para esto, utilizas una simple instrucción if que verifica la existencia de la clase.
Paso 4: Manejo de excepciones para controladores faltantes
Si el controlador no existe, es recomendable lanzar una excepción. En este caso, usa InvalidArgumentException para dar al usuario una respuesta clara de que el controlador especificado es desconocido:

Podrías, por ejemplo, mostrar un mensaje como:
Controlador desconocido: [Nombre del Controlador]
Paso 5: Parámetros compartidos para la acción del controlador
En el siguiente paso, se trata de definir las acciones y sus métodos para el controlador. En este ejemplo, establecemos que hay un método llamado save que es responsable de la carga. Para ello, le indicas a PHP que integre este método en el controlador. Esto se realiza mediante un formato de cadena, similar al de los controladores:

De esta manera, aseguras que las llamadas externas solo sean aceptadas por métodos de acción autorizados.
Paso 6: Verificación del método de acción mediante Reflection
Para asegurarte de que el método especificado exista, ahora se utiliza la reflexión de PHP. Esto se realiza mediante la instanciación de ReflectionClass.

Aquí compruebas con el método hasMethod si el método de acción deseado realmente existe en tu controlador:
Paso 7: Implementar la lógica de acceso a los parámetros
Una vez que los controladores y la acción están definidos, es momento de procesar los parámetros entrantes. Estos parámetros suelen aparecer en forma de un segmento de URL y necesitan ser divididos en pares. Para esto, utilizas la función explode():

En este paso, también debes asegurarte de que la cantidad de parámetros sea par. Si no es el caso, habrá un número inválido de parámetros; de nuevo, se recomienda lanzar una InvalidArgumentException:
Paso 8: Crear un array asociativo para los parámetros
En el siguiente paso, transformarás los parámetros en un array asociativo para poder pasarlos fácilmente a la acción. Esto se puede implementar mediante un bucle que asocie cada par clave-valor:

Aquí irás tomando alternadamente claves y valores para realizar la asociación antes de pasar el array final a tu método controlador.
Paso 9: Llamar a la acción del controlador
Ahora viene la parte práctica: estás listo para llamar al método de tu controlador con los parámetros correspondientes que has definido previamente. Para ello, instancias el controlador y llamas al método de la siguiente manera:

Asegúrate de que todos los pasos necesarios se hayan ejecutado correctamente al final. Ahora has implementado exitosamente el routing en tu aplicación PHP.
Resumen
En esta guía textual, has aprendido cómo implementar routing a través de controladores y acciones en una aplicación PHP orientada a objetos. Desde la estructura del directorio hasta la definición y verificación de controladores y sus métodos, hasta el tratamiento de parámetros, todo esto te permite un sistema de routing robusto para tu aplicación web.
Preguntas frecuentes
¿Cómo implemento el routing en PHP?El routing se organiza mediante la asignación de URLs a controladores y sus métodos de acción.
¿Qué son los controladores en PHP?Los controladores son clases que gestionan la lógica para procesar solicitudes y llaman a los métodos de acción correspondientes.
¿Cómo puedo asegurarme de que una acción exista?Utiliza la reflexión de PHP para verificar si el método está presente en la clase del controlador correspondiente.
¿Cómo proceso parámetros de URL?Los parámetros deben aparecer en pares y pueden ser convertidos a un array asociativo mediante explode().
¿Qué sucede si mi controlador no existe?Debes lanzar una excepción correspondiente para indicar que el controlador es desconocido.