Creando nuestro framework de desarrollo con PHP

Sin duda alguna, uno de los aspectos más tediosos de la puesta en marcha de cualquier proyecto de desarrollo es pararse a pensar como vamos a organizar la aplicación que vamos a poner en marcha.

Conozco grandes desarrolladores que se verían en un apuro muy serio si tuvieran que planificar desde 0 un proyecto sin tener la ayuda de un framework, un entrono de desarrollo, que permite al programador, olvidarse de la estructura del proyecto y dedicarse solamente a programar la lógica.

Laravel, CodeIgniter o Symfony para PHP, Ruby On Rails para Ruby, Django, Flask o Django Rest Framework para Python o Vue.js, son algunos de los entornos de desarrollo más populares entre la comunidad de desarrolladores.

Estos entornos, proveen al instalarse de una estructura de carpetas concreta y unas relaciones basadas en un escenario de Modelo-Vista-Controlador (MVC), muy ágiles y que permiten a los desarrolladores centrarse, como decíamos, en programar.

Así el desarrollador sabe que si tiene que programar una función de login de usuarios, pues en el modelo tendrá que definir las tablas implicadas y sus relaciones, en la vista tendrá que programar como ve el usuario el formulario de acceso y en el controlador, programará las acciones necesarias para el login y el manejo de errores, por ejemplo.

Todas estas estructuras y recursos, los incluyen de una forma u otra todos los frameworks de desarrollo, pero la pregunta es: ¿podemos crear nuestro propio framework de desarrollo en PHP? Y sobretodo ¿porqué iba alguien a dedicar un tiempo en desarrollar una herramienta de este tipo, cuando existen decenas, sino cientos en el mercado?

Pues la respuesta es un poco tópica, pero no deja de ser cierta: porque nadie dijo que no era posible.

Así que de esta manera, empieza una serie de post, que no se como de larga será, sobre el desarrollo de un pequeño framework en PHP, que pueda servir para algún proyecto personal.

Obviamente, ni que decir tiene, que no estará a la altura de cualquier producto comercial y que una vez terminado, si se termina, deberá ser usado bajo la responsabilidad de cada cual, pero si que me gustaría que a alguien le sirviera para poder seguir investigando y creciendo profesionalmente.

Llegados a este punto, es el momento de ponernos creativos y empezar a diseñar nuestra herramienta.

Vale.. ¿y ahora por donde empiezo?

Antes de entrar en pánico, vamos a crear una estructura de carpetas, que nos permita guardar una lógica, que sea sencilla para cualquier tipo de desarrollo posterior. Hemos de recordar que estamos creando una herramienta, no una aplicación completa, así que ha de ser lo suficientemente flexible para poder usarse en cualquier tipo de desarrollo.

Vamos a por ello.

  • app: será la carpeta principal de nuestra aplicación y donde se almacenará el código que gestione toda la lógica. Esta lógica, estará organizada siguiendo el esquema de MVC y tendrá una estructura similar a la siguiente:
    • app/models: en esta carpeta se almacenarán todos los ficheros relacionados con los modelos de datos y sus tablas y relaciones
    • app/controllers: en esta carpeta se guardarán todos los controladores que hagan funciones entre los modelos y las vistas
    • app/views: en esta carpeta se archivarán todas las vistas que mostrarán al usuario los datos o interactuarán con el
  • public: será la carpeta que contendrá el fichero de inicio de la aplicación (index.php) y se encargará de lanzar todos los procesos. Dentro de public, encontraremos también el fichero .htaccess que nos permitirá redirigir las url a las vistas correspondientes y haciendo también más amigables las direcciones web. También contendrá otra carpeta:
    • public/assets: carpeta donde almacenaremos aquellos elementos multimedia fijos: css, imágenes, ficheros js, que sean necesarios para la aplicación
  • vendor: en esta carpeta se instalarán todas aquellas librerias de terceros, que en algún momento se puedan necesitar para nuestra aplicación. No siempre será así, pero no está de más tenerlo previsto.

Como se puede ver, es una estructura de lo más convencional, pero es precisamente lo que buscamos, que nuestro proyecto pueda escalar en el futuro y que si otros desarrolladores han de tocar el código, puedan ver a simple vista como está organizado.

Ahora ya podemos empezar a montar algo de código, para que todo esto tenga un poco de sentido. Pero esto ya, la próxima entrega. Por hoy nos vamos a detener aquí, con el planteamiento y estructura del proyecto.

Os dejo un par de pantallazos del mismo, corriendo en mi equipo y en unos días, abriré un repo en GitHub para compartir el código.

Una página de contacto, por ejemplo
La vista principal de la aplicación
Publicada el
Categorizado como Desarollo Etiquetado como

Por Jose Manuel Sanz Prieto

Desarrollador web. En este blog hablo de fotografía, programación con Django, Python, PHP y privacidad.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *