1. Introducción
En la actualidad se ha incrementado la demanda para desarrollar aplicaciones web por parte de las empresas u organizaciones que ofrecen sus servicios y/o productos a través de la web empleando tecnologías actuales [1], estas disponen de frameworks que ayudan a crear web de forma rápida, estructurada y ofrecen un conjunto de API integradas [2]. Los frameworks PHP son la mejor opción ya que permiten implementar web dinámicas, eficientes, confiables, seguras, escalables y mantenibles con el pasar del tiempo, además de reducir el tiempo de desarrollo y corrección de errores de forma sencilla [3, 4]
El lenguaje de programación PHP es una herramienta de código abierto para desarrollar aplicaciones web dinámicas, de fácil manipulación y aprendizaje, multiplataforma con mínimos requerimientos de configuración [5]. Considerado por los programadores uno de los lenguajes más poderosos en el ámbito web por su flexibilidad, escalabilidad, amplia documentación y soporte diverso de bases de datos [2]. La W3CTechs indica que el 79 % de los sitios web utilizan PHP para desarrollar sus aplicaciones, entre los cuales consta Facebook y Wikipedia [6].
Un framework también conocido como marco de trabajo, es un conjunto de estructuras y componentes de software predefinidos e interconectados que sirven de base para la organización y el desarrollo de sistemas con propósitos generales [7].
Los frameworks PHP son muy útiles al momento de desarrollar aplicaciones web, brindan robustez, seguridad, reutilización de código, facilidad de mantenimiento y trabajo en equipo, cuentan con bibliotecas y herramientas integradas que permiten el desarrollo más rápido y aplicación de buenas prácticas de programación. Además, ofrecen independencia del sistema gestor de base de datos, ya que utiliza capas de abstracción intermedia, el enrutamiento es de forma automática y permite personalización de las url [7].
Los frameworks PHP más utilizados por los programadores son: Laravel, Symfony, CodeIgniter, Zend, CakePHP, Yii, estos se basan en la arquitectura modelo - vista - controlador (MVC) que permite desarrollar aplicaciones modulares de forma rápida, separando el código en capas [8]. MVC se compone de tres partes que son: el modelo que es la lógica del negocio interactúa directamente con la base de datos; la vista encargada del diseño y presentación de información a través de la interfaz de usuario; y el controlador que gestiona las peticiones entre el modelo y la vista [9].
El análisis de los framework PHP con arquitectura MVC se basa en la explicación de cada uno de los framework más utilizados para orientar y aconsejar a los desarrolladores cual es el más adecuado al momento de realizar aplicaciones web optimizando tiempo sin tener que empezar la codificación desde cero, en base a sus características, rendimiento, requisitos de alojamiento, ventajas y desventajas [10].
Este artículo contiene en la sección dos, la recopilación de definiciones, características y complementos de los frameworks PHP basados en la arquitectura MVC. La sección tres se discute y analiza los resultados mediante tablas y cuadros estableciendo las ventajas y desventajas de los frameworks para desarrollo aplicaciones web. En la última sección se indican las conclusiones a las que se llegaron luego del estudio de literatura de artículos existentes relacionados al tema.
La investigación tiene como objetivo proporcionar a los desarrolladores un mejor conocimiento de los frameworks PHP MVC y las bondades que ofrecen para desarrollar aplicaciones web más rápidas, sin escribir mucho código y empleando buenas prácticas de codificación.
2. Materiales y métodos
En la investigación se empleó el método analítico-sintético revisando literatura de artículos de diferentes autores relacionados con la temática, se estudió seis frameworks PHP MVC más populares y los preferidos por los desarrolladores web.
Se estudiaron y analizaron los frameworks PHP para determinar su utilidad, conjunto de herramientas, y módulos que permiten el desarrollo rápido de aplicaciones web trabajando de forma organizada, ahorrando tiempo y evitando la repetición de código. Desarrollar sitios web en PHP puro es complejo, se debe organizar el código, realizar la validación de datos, controlar la sesión y autenticación de usuarios, configurar la conexión con la base de datos y las pruebas. Cada programador tiene su estilo de codificar y puede emplear diferentes patrones, esto resulta complicado y tedioso dar el mantenimiento a la aplicación, de ahí la necesidad de utilizar un framework que soluciona todos los problemas mencionados.
La recopilación de información de los frameworks PHP proporciona las características, rendimiento, versatilidad y eficiencia de cada uno a los desarrolladores, consideraciones que deben analizar al momento de seleccionar el más idóneo para sus proyectos web; a saber:
1.1. Laravel
Creado en 2011 con licencia MIT, es un framework moderno para desarrollar aplicaciones web robustas de código abierto, su última versión es Laravel 9 que incluye bibliotecas de Symfony 6 y requiere de PHP 8. Se puede obtener desde el sitio oficial https://laravel.com/ [11].
El framework PHP para artesanos web, de sintaxis simple y elegante que evita el código espagueti, basado en el patrón de arquitectura MVC, facilita las tareas comunes que se utilizan en los proyectos web como el manejo de sesiones, la autenticación y el enrutamiento [11].
Eloquent es el mapeador objeto relacional (ORM) de Laravel basado en el patrón active record, encargado de la interacción del modelo de datos con los sistemas gestores de base de datos de preferencia MySQL, Postgres, SQLite y SQL Server. Las consultas SQL no se ejecutan directamente, sino que se transforman a MVC para proteger de la inyección SQL.
Ofrece versiones de soporte a largo plazo (Long Term Support - LTS) brindando más tiempo para mantenimiento y soporte, posee un sistema de plantillas ligeras e integradas que permiten crear diseños con contenido dinámico, documentación completa de forma gratuita y una gran comunidad de desarrolladores a nivel mundial [12].
1.2. Symfony
Lanzado en 2005 su distribución se realiza bajo licencia MIT. Es un framework de código abierto completo, cuenta con un conjunto de componentes PHP desacoplados y reutilizables, basado en MVC y soporte en AJAX para desarrollar aplicaciones web. Su última versión (LTS) estable es Symfony 6.0 que requiere de PHP 8 o superior. Sitio oficial https://symfony.com/ [13]
La filosofía de Symfony es adoptar y promover el profesionalismo, las mejores prácticas, la estandarización y la interoperabilidad de las aplicaciones [13].
Considerado como el framework PHP más rápido, su flexibilidad permite la inyección de dependencias Java. Es compatible con la mayoría de los gestores de base de datos y permite la ejecución en plataformas Windows, Linux y Unix.
Un framework 3 en 1: full stack para desarrollar aplicaciones complejas; brick by brick acorde a las funcionalidades que necesita el proyecto; y microframework para funcionalidades especificas no es necesario instalar y desarrollar todo el framework sino solo el bloque que necesita [13].
Symfony posee abundante documentación y soporte profesional, su comunidad es alrededor de 600.000 desarrolladores a nivel mundial, y cuenta con 3.173 colaboradores de código.
1.3. CodeIgniter
Publicado en 2006 es distribuido con licencia MIT. Es un framework PHP de código abierto ligero y potente, con herramientas, complementos y librerías interoperables para desarrollar aplicaciones web basado en el patrón MVC. La última versión disponible es la 4 que requiere de PHP 7.2, la encuentras en el sitio oficial https://www.codeigniter.com [14].
Es apto para los principiantes que están incursionando en los framework debido a su facilidad de uso y poca configuración, excepto la conexión con la base de datos, además soporta múltiples métodos de caching y tiene una amplia compatibilidad de alojamiento.
El framework posee protección contra ataques de falsificación de solicitud entre sitios (CSRF) y secuencia de comandos entre sitios (XSS), la versión 4 incorpora una función de escape sensible al contexto y CSP. Su documentación es clara, contiene una guía de usuario con tutoriales y prácticas que se incluyen en la descarga del framework [15].
1.4. Zend
Publicado en 2006 bajo licencia libre BSD. Publicado en 2006 bajo licencia libre BSD. Framework de código abierto 100 % orientado a objetos, usa paquetes PHP predefinidos que facilitan el desarrollo del proyecto web, trabaja con el patrón MVC, ultiplataforma y compatible con cualquier servidor web. La última versión 3 es compatible con PHP 7 que mejora la velocidad de sus aplicaciones, la encuentras en el sitio oficial https://framework.zend.com/ [16]. Framework de código abierto 100 % orientado a objetos, usa paquetes PHP predefinidos que facilitan el desarrollo del proyecto web, trabaja con el patrón MVC, multiplataforma y compatible con cualquier servidor web. La última versión 3 es compatible con PHP 7 que mejora la velocidad de sus aplicaciones, la encuentras en el sitio oficial https://framework.zend.com/ [16].
Los componentes están construidos con una baja dependencia de otros componentes, esto permite a los desarrolladores utilizar separado, este tipo de diseño se conoce como “use-at-will” (uso a voluntad). La combinación de sus componentes ofrece gran rendimiento que convierte en un potente framework.
La autenticación y filtrado de entrada se realiza mediante la implementación de clases, cuenta con algoritmos criptográficos brindando seguridad a los sitios web, las contraseñas se almacenan con bcrypt, utiliza cifrado con AES-256, permite personalizar la localización, almacenamiento en cache, validación de verificación de humano (Captcha).
Cuenta con tutoriales, manuales online, seminarios y foros en el sitio oficial.
1.5. CakePHP
Fue lanzado en 2005, se distribuye bajo licencia MIT. El framework PHP es de código abierto utiliza el patrón MVC y ORM integrado, funciones para generar código que ayuda a los programadores crear prototipos rápidamente ya que ofrece un sistema de plantillas rápido y flexible para desarrollar aplicaciones web. Su última versión es la 4 que requiere de PHP 7 o posterior y la encuentras en el sitio oficial https://cakephp.org/ [17].
El framework dispone de un conjunto de convenciones que ayudan a guiarlo en el desarrollo de su aplicación ya que cuenta con herramientas todo en uno. La gestión de la seguridad es integrada, entre las que consta la protección CSRF, protección contra manipulación de formularios, y prevención de inyección SQL.
La configuración de la base de datos es simple, sin archivos XML o YAM. El método de programación Scaffolding permite desarrollar aplicaciones desde la base de datos que integra operaciones de inserción, lectura, actualización y eliminación (CRUD) de forma sencilla. Además, tiene ayuda para AJAX, Javascript y HTML.
El código base de CakePHP ha sido auditado a través del programa Mozilla Secure open Source.
Los manuales son mantenidos por la comunidad que es muy activa y brinda soporte eficiente de todas tus inquietudes.
1.6. Yii
Lanzado en 2008 se distribuye bajo licencia BSD. Yii es un framework PHP orientado a objetos de alto rendimiento basado en componentes y el patrón de diseño MVC para desarrollar aplicaciones web a gran escala gracias a su flexibilidad y su compatibilidad de caché y por ser de código abierto. Su última versión es 2 que requiere PHP 5 o posterior para su correcto funcionamiento, puedes obtenerlo desde la página oficial https://www.yiiframework.com/ [18].
La integración de herramientas ayuda a programar código sólido y seguro, ofrece al desarrollador plantillas de interfaz de usuario de Bootstrap, un potente depurador, jQuery y complementos para AJAX. El framework Yii brinda máxima funcionalidad ya que agrega la menor sobrecarga posible [19].
Respecto a la parte de seguridad incluye prevención XSS, CSRF, evita la inyección SQL y permite la manipulación de cookies, control de entrada de formularios y validación. Realiza un mecanismo de persistencia a base de datos mediante objeto de acceso a datos (Database Acces Objects - DAO), emplea el patrón de arquitectura de datos active record para trabajar con gestores de datos relacionales (SQL) y no relacionales (NoSQL), además de disponer de un generador de código para modelos e integración de operaciones CRUD [20].
La comunidad Yii es grande, cuenta con profesionales que contribuyen a su desarrollo, posee una colección de documentos oficiales que puedes emplear fuera de línea, y tutoriales para desarrollar un simple blog.
1.7. MVC
Fue creado inicialmente para aplicaciones de escritorio, también se adapta para desarrollar proyectos web orientados a lenguajes de programación como .NET, C++, Ruby, Java, JavaScript, Perl, PHP y Python y muchos frameworks comerciales y no comerciales se basan en este patrón [21].
El patrón de diseño MVC permite desarrollar aplicaciones web grandes y complejas donde se separada la lógica del negocio, la presentación y el acceso a los datos que facilita el trabajo en grupo y su mantenimiento y donde se requiere tener independencia de las plataformas [22, 23].
El MVC consta de tres capas que son:
Modelo
Se establecen las reglas del negocio, define los datos y funcionalidad que contiene la aplicación mediante mecanismos de persistencia. Si surgen cambios en los datos se notifica a la vista y en algunas ocasiones al controlador [24].
Responsable de responder a las solicitudes de la vista para que el usuario los visualice a través de las instrucciones (eventos) que envía el controlador.
Vista
También conocida como interfaz de usuario, permite visualizar los datos de la aplicación al usuario final (HTML) que han sido solicitados al modelo [24].
El usuario interactúa con la aplicación para enviar o recibir los datos del modelo, los eventos son gestionados por el controlador.
Controlador
Intermediario entre el modelo y las vistas, responde a los eventos y/o acciones que el usuario genera a la aplicación [24].
Maneja los datos que el usuario envía, actualiza el modelo en dependencia de la solicitud [1].
3. Resultados y discusión
Este trabajo describe seis frameworks PHP MVC considerados los principales para desarrollar proyectos web, cada uno se implementa y trabaja de forma única, con sus ventajas y desventajas que deben tener en cuenta los desarrolladores.
El sitio web StackOverflow, en una encuesta realizada a los desarrolladores (2021 Developer Survey) a nivel mundial, anualmente explora las herramientas y tecnologías que utilizan los desarrolladores. En el apartado Technology sección Most popular technologies la mayoría de los encuestados trabajan en programación web, PHP tiene una aceptación de 21.98 %; los frameworks web Laravel 10.12 % y Symfony 3.85 %. Además, en la sección Top paying technologies encontramos PHP con un salario anual de $38.916; los framework web que se destacan son Symfony $45.396 y Laravel $29.196 que gana al año un desarrollador [25].
Los datos de la encuesta muestran que los frameworks Laravel y Symfony son los más empleados por desarrolladores y los mejor pagados a nivel mundial, para desarrollar aplicaciones web con lenguaje de programación PHP.
En la Tabla 1, se realizó un resumen de los frameworks PHP, todos son de código abierto, multiplataforma y trabajan con la arquitectura MVC, ofrecen a los desarrolladores conjunto de componentes, herramientas y plantillas que facilitan el desarrollo de las aplicaciones web, permiten la integración de complementos AJAX, jQuery y Java, previenen inyecciones SQL, CSRF y XSS, se los obtiene de forma gratuita en los sitios oficiales, cuentan con amplia documentación y tienen una comunidad grande de desarrolladores.
En la Tabla 2, se han listado las características principales de los frameworks, esto ayuda a tener ciertas consideraciones al momento de decantarse por uno de ellos para desarrollar aplicaciones web empleando el patrón de diseño MVC, todos son compatibles con PHP 7 o superior, cuentan con un ORM incorporado y motores de plantillas que permiten el diseño rápido, poseen una buena documentación con gran comunidad de desarrolladores a nivel mundial.
En la Tabla 3, se lista las bases de datos relacionales y no relacionales compatibles de cada frameworks Symfony, CodeIgniter y Zend permiten conectarse con más gestores que los demás frameworks, esto permite a los desarrolladores seleccionar la base de datos acorde a su proyecto o aplicación a desarrollar.
En la Tabla 4, se abordan características de seguridad de los frameworks, cuatro de ellos incorporan autenticación de usuarios, autorización y encriptación. El filtrado XSS solo CodeIgniter y Yii, mientras que la protección CSRF incorpora CodeIgniter, CakePHP y Yii.
4. Conclusiones
El desarrollo de aplicaciones web desde cero, demanda más trabajo para el desarrollador, no se organiza y estructura de forma correcta el código, no se aplican buenas prácticas de programación y la gestión de la seguridad no es muy confiable. Los frameworks PHP MVC permiten desarrollar aplicaciones web dinámicas y escalables, optimizan el tiempo y las actividades, al contar con plantillas, librerías, complementos, organización de código, facilidad de mantenimiento sin afectar el rendimiento de sus componentes, gestión de la seguridad, documentación y soporte de cada una de sus comunidades.
Elegir un framework para desarrollar aplicaciones web no es una tarea sencilla, ya que cada uno tiene sus ventajas y desventajas, se deben analizar algunos aspectos importantes como son: la curva de aprendizaje, facilidad de uso, requisitos técnicos mínimos para su instalación, soporte de gestor de base de datos de tu elección, compatibilidad de alojamiento de tu servidor web preferido, uso de memoria, buena documentación y gestión de seguridad de tu sitio.
Los frameworks CodeIgniter y Yii son la mejor elección para los principiantes, aplicados a proyectos pequeños, por su fácil curva de aprendizaje, pocos parámetros de configuración con la base de datos y documentación detallada que te guía en el desarrollo de tu sitio o aplicación web. Laravel o Symfony se emplean para proyectos web grandes y complejos, permiten escalabilidad, poseen motor de plantillas integrado, soportan varios gestores de base de datos, incluyen funcionalidad de pruebas y tienen la mayor comunidad de desarrolladores.