Un front controller maneja todos los request en una aplicación web y está estructurado usualmente en dos partes, el request handler, que es donde se interpretan los parametros y se ejecuta la segunda parte, el command hierarchy que es el comando o acción que debe ejecutar la aplicación, tambien conocido como Page controller.

En las aplicaciones con PHP el esquema más comun es tener un archivo index.php y decida que acción tomar dependiendo de los parametros GET que reciba.

Esta imagen representa una forma bien sencilla de Front Controller, donde el archivo index.php recibe el nombre del script que va a cargar en el variable $_GET['page']. Los scripts (actions) están almacenadas en el folder pages.

Todo el que ha usado PHP por más de dos horas ha implementado de una manera u otra un page controller, aunque sea usando un if/else para ver si un formulario se envio.

En este ejemplo, el page controller es about.php. Podría tener un código como este:

Una estructura más organizada

Podemos tomar ventaja de la lógica que podemos realizar cuando estamos manejando el request HTTP para organizar mejor el codigo de nuestra aplicación.

Podemos separar la presentación de la logica guardando los page controllers y los templates en directorios distintos, Que los page controllers decidan que templates utilizar en cada request.

Se puede mejorar incluso la estructura de las URL’s enviando todos los requests al archivo index.php con un .htaccess. El archivo index.php (front controller) se va a encargar de llamar las acciones necesarias.

Para comenzar a organizar mejor el código de la aplicacion, vamos a crear un directorio con el nombre controllers, donde vamos a guardar todos los page controllers de la aplicacion. Luego creamos otro directorio con el nombre de views donde vamos a guardar todos los templates.

Usando $_SERVER['QUERY_STRING']

Si tenemos una URL como http://example.com/about $_SERVER['QUERY_STRING'] va a ser about, una como http://example.com/about/us va a ser about/us, lo que nos da una pista de como podemos usar la URL para definir la estructura de un request a nuestra aplicación. Nuestro front controller ahora va a decidir que page controller llamar y que accion o metodo ejecutar y que parametros aplicar a este llamado, todo dependiendo de la URL.

Esta vez el código del front controller luce así:

Línea por línea el front controller ahora hace lo siguiente:

  • Toma el QUERY_STRING y lo parte donde hay un / usando la función explode que lo convierte en un array.
  • Toma el primer elemento del array y lo usa como controller, si está vacío usa el default ‘home’.
  • Toma el segundo elemento del array y lo usa como action, si está vacío usa el default ‘index’.
  • Toma los elementos restantes para paserselos como parametros al action.
  • Incluye el controller desde el directorio controllers.
  • por último ejecuta el action.

El controller about tiene este código:

Entradas Relacionadas:

  1. Detecta un request Ajax con PHP