Autor

Colaboraciones

Artículos escritos por los lectores.

Más artículos de Colaboraciones | Porfolio

Índice

Éste artículo es una colaboración de Jordi Bassagañas

La semana pasada, en el Curso de Programación PHP guay, desarrollamos una agenda PHP basada en archivos CSV. El ejercicio era tan sencillo que no utilizamos ningún framework de desarrollo de aplicaciones como por ejemplo Symfony, Laravel o Yii, pero sí que aplicamos algunas ideas de análisis para afrontar nuestro desarrollo con garantías de éxito.

Seguro que a algunos os habrá gustado esta decisión porque pensáis que a veces es mejor no usar ningún framework, sobre todo cuando la aplicación es muy sencilla (en los años recientes este ha venido siendo un argumento muy habitual), aunque con la llegada de los micro frameworks como Slim más de uno comenzará a plantearse esta cuestión, ¿verdad?

En todo caso, nosotros levantamos nuestra app desde cero con estas ideas:

  1. Definimos la estructura de carpetas pensando en CRUD, de acuerdo a los objetos que tenemos que gestionar, y a las operaciones que se llevan a cabo sobre dichos objetos.
  2. Separamos la lógica PHP de la lógica de presentación (HTML, CSS y JS).
  3. Implementamos el patrón de diseño Singleton en la clase People.

Por cierto, te recuerdo que el código de AgendaPHPGuay está disponible en este repositorio de GitHub.

Finalmente propusimos a los alumnos que mejoraran la seguridad de AgendaPHPGuay implementando el patrón de diseño de software Front Controller. Y los que teníais un nivel de programación intermedio comentabais que esta propuesta empezaba a complicarse bastante. Pues bien amig@s, que no cunda el pánico, hoy voy a explicar qué pasos hay que seguir exactamente para poner un Front Controller en la app.

¿Qué es Front Controller?

Front Controller es un patrón de diseño de software muy utilizado en aplicaciones web que consiste en definir un único punto de acceso para todas las peticiones HTTP.

A diferencia de las aplicaciones web clásicas, por así decir, donde el usuario podía ejecutar directamente cualquier script referenciándolo directamente en la barra de direcciones de su navegador, con Front Controller solo se accede a un punto central único: el famoso archivo index.php.

El resto de archivos permanece inaccesible a los usuarios, a excepción de los assets, por supuesto, es decir, las imágenes, los archivos CSS y los archivos JavaScript.

Front Controller aporta por tanto una capa de seguridad, y mejora también el mantenimiento de la aplicación porque permite definir en un solo punto toda aquella lógica que de otro modo estaría esparcida en varios archivos diferentes. Esta es la lógica de inicialización o arranque de la app (bootstrap logic).

¿Cómo se implementa Front Controller?

Implementar Front Controller es sencillo. Por un lado, primero tenemos que crear una carpeta llamada public en la carpeta raíz de nuestra aplicación. Aquí ponemos los archivos que pueden ver los usuarios de Internet, por así decirlo. O dicho de otra forma, los archivos que están en public son los únicos accesibles por los usuarios desde su navegador web. Estos archivos son los assets y el mismo index.php. A modo de ejemplo puedes echar un vistazo a esta estructura de directorios recomendada por Slim.

Luego, por otro lado, tienes que asegurarte que tu servidor web canaliza todas las peticiones hacia tu archivo index.php.

En Apache:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]

En nginx:

location / {
   try_files   $uri $uri/ /index.php;
}

¡Y esto es todo por hoy amig@s! Espero que esta entrada os haya gustado y que entendáis bien las mejoras que aporta el uso de Front Controller (seguridad y escalabilidad). Ahora solo falta adaptar el código de AgendaPHPGuay para que funcione con esta nueva característica, pero como nosotr@s aplicamos ideas de análisis y diseño de apps desde el principio, ya veréis que será muy sencillo.

¿Has visto algún error?: Por favor, ayúdame a corregirlo contactando conmigo o comentando abajo.

Categorías:Etiquetas:

Quizá también te interese leer...