El desarrollo de aplicaciones web y sitios web se ha vuelto cada vez más sencillo en los últimos años. Incluso los más reacios a la tecnología se han vuelto bastante hábiles con productos como WordPress y Wix.

Para los desarrolladores más avanzados, existe una gran cantidad de herramientas que ayudan a simplificar el proceso de desarrollo. Una de las más útiles de esas herramientas es Laravel.

Este artículo responde a la pregunta «¿Qué es Laravel?» desglosando una visión general de los fundamentos de los frameworks PHP que se utilizan en el desarrollo web. Seguiremos con una visión general de las características de Laravel, una lista de las estructuras y componentes importantes de Laravel, y una descripción de algunos de los paquetes más útiles de Laravel.

¿Qué es Laravel?

La respuesta a la pregunta «¿Qué es Laravel?» es sencilla: Laravel es un framework PHP multiplataforma para construir aplicaciones web.

Pero entender realmente los beneficios de Laravel y sus usos requiere una inmersión más profunda. Laravel permite a un desarrollador aprovechar una gran biblioteca de funcionalidad pre programada (como autenticación, enrutamiento y plantillas HTML). El acceso a esta biblioteca simplifica la construcción de aplicaciones web robustas de forma rápida y minimiza la cantidad de codificación necesaria.

Laravel ofrece un entorno de desarrollo altamente funcional, así como interfaces de línea de comandos intuitivas y expresivas. Además, Laravel  utiliza el mapeo objeto-relacional (ORM) para simplificar el acceso y la manipulación de datos.

Las aplicaciones de Laravel son altamente escalables y tienen bases de código fáciles de mantener. Los desarrolladores también pueden añadir funcionalidad a sus aplicaciones sin problemas, gracias al sistema de empaquetado modular de Laravel y a la sólida gestión de dependencias.

¿Laravel es Frontend o Backend?

Laravel es principalmente un marco de desarrollo de backend, aunque ofrece algunas funcionalidades de frontend. Sin embargo, muchas de las características de Laravel son agnósticas al frontend.

¿Es Laravel un Lenguaje de Programación?

Laravel es un framework PHP y utiliza un lenguaje de scripting en lugar de ser un lenguaje de programación PHP estricto. Aunque los lenguajes de scripting y los de programación están relacionados, tienen varias diferencias notables, principalmente en la facilidad de uso y la velocidad de ejecución.

Los lenguajes de scripting son lenguajes interpretados específicos de la plataforma. Por el contrario, los lenguajes de programación son lenguajes compilados e independientes de la plataforma. Al ser específicos de la plataforma, los lenguajes de scripting dependen del compilador de la aplicación en la que se trabaja.

Las aplicaciones construidas con lenguajes de scripting se compilan en tiempo de ejecución, lo que significa que cada instrucción se interpreta individualmente en tiempo de ejecución, haciendo que la aplicación sea más lenta que una aplicación precompilada. La compilación en tiempo de ejecución también hace que la aplicación se detenga o se cierre si encuentra un error en tiempo de ejecución; en cambio, las aplicaciones pre compiladas realizan la comprobación de errores durante la compilación, lo que las hace más robustas en tiempo de ejecución. Para muchos usuarios, sin embargo, las desventajas de los lenguajes de scripting se ven compensadas con creces por su facilidad de uso e iteración.

¿Qué es un Framework PHP?

PHP (acrónimo recursivo de PHP Hypertext Preprocessor) es un lenguaje de scripting del lado del servidor de código abierto ampliamente utilizado para el desarrollo web. A principios de 2021, casi el 80% de los sitios web utilizan PHP. Aunque muchos no estén familiarizados con PHP, todo el mundo conoce una de las aplicaciones PHP más conocidas: WordPress.

Un framework de PHP proporciona un conjunto de bibliotecas de código que contienen módulos pre programados que permiten al usuario construir aplicaciones más rápidamente. Ofrecen a los desarrolladores web una serie de ventajas, como un desarrollo más rápido, una menor necesidad de escribir código y una mayor seguridad. También ayudan a los desarrolladores novatos a crear buenas prácticas de codificación, ya que requieren una organización específica del código. Además, los frameworks PHP suelen requerir menos mantenimiento que las aplicaciones construidas desde cero.

Muchos frameworks modernos de PHP están orientados a objetos. Por ello, es beneficioso tener una comprensión básica de conceptos como clases, objetos y herencia antes de sumergirse en un framework.

Un diagrama MVC. (Fuente: Wikipedia)
Un diagrama MVC. (Fuente: Wikipedia)

Los frameworks de PHP utilizan una arquitectura Modelo-Vista-Controlador (MVC). Para aquellos que no están familiarizados con la arquitectura MVC, el Modelo consiste en los datos de la aplicación, junto con toda la lógica asociada. Una tabla de suscriptores, por ejemplo, puede ser un Modelo. La Vista proporciona un punto de interacción con un usuario, donde los datos del Modelo pueden ser vistos y modificados. El controlador es un conducto entre la vista y el modelo. En otras palabras, el Controlador toma las peticiones del usuario, recupera la información necesaria del Modelo, la procesa y la devuelve a la vista.

Las aplicaciones PHP, como WordPress, tienen algunas vulnerabilidades conocidas. Los ejemplos más notables son la inyección de código y la inyección SQL. Laravel incluye características que ayudan a prevenir la inyección SQL y otros ataques.

Sin embargo, los desarrolladores deben realizar esfuerzos adicionales, como las pruebas de penetración, para garantizar la seguridad de sus aplicaciones. Según la experta en tecnologías de la información Barbara Ericson, de Cloud Defense, la seguridad de las aplicaciones web consiste en pruebas de penetración y cortafuegos de aplicaciones web, que van de la mano.

Las pruebas de penetración son pruebas más complejas realizadas por profesionales de la ciberseguridad cualificados, que intentarán entrar en tu sistema sin ningún conocimiento previo de su desarrollo para identificar vulnerabilidades de seguridad no parcheadas.

¿Por Qué Debería Usar Laravel?

Habiendo respondido a «¿Qué es Laravel?», la siguiente pregunta es: «¿Por qué Laravel?». Laravel proporciona un gran conjunto de herramientas robustas que ayudan a que el proceso de desarrollo de aplicaciones web sea más fácil y rápido, y las bases de código de las aplicaciones finales están bien estructuradas y se mantienen fácilmente.

Algunos de los beneficios específicos de Laravel son:

Laravel es Fácil de Aprender

Laravel es relativamente fácil de aprender, si se tienen los conocimientos adecuados. Laravel requiere una comprensión general de PHP y conceptos de programación orientada a objetos (POO) para su uso efectivo. Saber al menos algo de HTML también es útil. Y para cualquier arquitectura MVC, también es útil comprender los sistemas de gestión de bases de datos relacionales, como MySQL o PostgreSQL.

Laravel Simplifica el Proceso de Desarrollo

Desde el principio, Laravel fue diseñado para simplificar las tareas que son comunes en una variedad de proyectos de desarrollo web como el enrutamiento, la autenticación, la migración, el almacenamiento en caché, y más. Laravel simplifica la integración de módulos prefabricados en una aplicación, utilizando interfaces de línea de comandos intuitivas y expresivas y Composer.

Laravel también tiene una amplia colección de documentación en línea, que es un buen punto de partida para los desarrolladores más experimentados. También hay disponible una amplia variedad de recursos de aprendizaje en línea dirigidos a todos los niveles de habilidad.

Laravel Tiene Herramientas Para Desarrolladores de Todos los Niveles

Laravel se describe a sí mismo como un framework progresivo, lo que significa que incluye una variedad de funcionalidades que los usuarios de todos los niveles encontrarán útiles. Por ejemplo, los principiantes tienen acceso a kits de inicio para módulos como las características básicas de autenticación. Muchas de estas herramientas se discuten en mayor detalle a continuación.

Estructura del proyecto Laravel. (Fuente: ITSolutionStuff.com)
Estructura del proyecto Laravel. (Fuente: ITSolutionStuff.com)

Los usuarios más experimentados pueden aprovechar los motores subyacentes a los kits de inicio para construir sus propios procesos de autenticación e integrarlos con sus frontends preferidos.

Laravel es Fácilmente Escalable

Laravel es altamente escalable. Con soporte integrado para sistemas de caché rápidos y distribuidos, las aplicaciones de Laravel son capaces de atender millones de solicitudes al mes. Laravel también ofrece una plataforma de implementación sin servidor, Vapor, que se basa en AWS y proporciona un alto grado de escalabilidad.

Laravel Tiene un Ecosistema y una Comunidad Masivos

Laravel tiene un enorme ecosistema apoyado por una gran comunidad de desarrolladores. Debido a que Laravel es uno de los frameworks de PHP más utilizados, la biblioteca de aplicaciones y paquetes de Laravel disponibles es sustancial. Tanto los paquetes oficiales de Laravel como los de terceros están fácilmente disponibles.

Los paquetes oficiales de Laravel (muchos de los cuales se discuten a continuación) incluyen autenticación, gestión de servidores, facturación de suscripciones, pruebas y automatización de navegadores, y más. Los paquetes de terceros están disponibles en varios sitios, incluyendo Packalyst y Laravel News.

También hay una gran cantidad de información disponible en la comunidad de desarrolladores de Laravel. Los desarrolladores que tengan preguntas seguro que encontrarán una respuesta visitando uno de los muchos foros de Laravel, como Laravel.io, The Laravel subreddit, y Laracasts.

Laravel es Ampliamente Utilizado

Muchas empresas utilizan Laravel para ayudar a construir sitios web altamente funcionales:

Vacations by Rail es un sitio de planificación de viajes en tren construido con el framework PHP Laravel. También está integrado con el motor de reservas de Softrip.

Vacations by Rail utiliza Laravel bajo el capó.
Vacations by Rail utiliza Laravel bajo el capó.

El sitio web de Setapp de aplicaciones comisariadas para Mac e iOS también está construido utilizando el framework PHP Laravel.

SetApp está construido con Laravel.
SetApp está construido con Laravel.

La aplicación de búsqueda de restaurantes de Restaurants.com es muy intuitiva de usar, gracias a que está construida con plantillas de aplicaciones móviles Laravel.

Restaurants.com está impulsado por Laravel.
Restaurants.com está impulsado por Laravel.

¿Qué Hace Laravel?

El conjunto de características de Laravel es demasiado extenso para cubrirlo completamente en este breve resumen. Algunas de las características más significativas incluyen:

Gestión de Rutas

Laravel proporciona un manejo de rutas sencillo e intuitivo, utilizando nombres simples para identificar las rutas en lugar de nombres largos de ruta. El uso de identificadores de ruta también facilita el mantenimiento de las aplicaciones, ya que el nombre de la ruta se puede cambiar en un solo lugar en vez de tener que cambiarlo en todo. Todas las rutas de la interfaz web en una aplicación Laravel se registran en el archivo routes/web.php.

Seguridad

Laravel incluye una serie de características de seguridad que incluyen la autenticación de usuarios, autorizaciones de roles de usuarios, verificación de correo electrónico, servicios de encriptación, hashing de contraseñas y características de restablecimiento de contraseñas.

Migración

Laravel proporciona un control de versiones para las bases de datos de la aplicación mediante migraciones. Las migraciones hacen un seguimiento de cómo se ha modificado una base de datos a lo largo del tiempo, facilitando la destrucción o recreación de la base de datos cuando sea necesario.

Plantillas

Blade es el motor de plantillas PHP de Laravel. Los motores de plantillas PHP ayudan a dividir la lógica del negocio de las plantillas HTML, lo que resulta en una base de código que es más fácil de mantener. Muchas de las funcionalidades de Laravel dependen de las plantillas de Blade. Blade ofrece más funcionalidad que otros motores de plantillas porque Blade permite el uso de código PHP plano, cosa que otros no hacen.

Sesiones

Laravel utiliza sesiones para almacenar información sobre el usuario a través de varias solicitudes. Las cookies son un ejemplo de controlador de sesión integrado en Laravel.

Validación de Datos

Laravel hace que sea sencillo validar los datos entrantes del usuario. Laravel incluye una serie de reglas de validación de datos, con mensajes de error personalizables.

Gestión de la Caché

Laravel soporta el almacenamiento en caché de datos para minimizar los tiempos de procesamiento de las tareas de la aplicación. La API de caché de Laravel soporta una variedad de backends de caché de terceros como Memcached y Redis.

Gestión de Errores

La gestión de errores se configura automáticamente al iniciar un nuevo proyecto Laravel. Las aplicaciones Laravel pueden ejecutarse en modo de depuración, generando mensajes de error detallados para todos los errores que se produzcan.

Prueba

Laravel ofrece cifras sustanciales de pruebas fuera de la caja. Laravel admite pruebas unitarias, que prueban secciones pequeñas y aisladas del código de la aplicación, así como pruebas de características, que prueban secciones más grandes de código y funcionalidad de nivel superior.

Almacenamiento y Gestión de Archivos

Laravel utiliza el paquete de PHP Flysystem para proporcionar controladores para trabajar con una variedad de sistemas de archivos, desde sistemas de archivos locales hasta el almacenamiento basado en la nube como Amazon S3. Laravel también proporciona la transferencia de archivos con SSH File Transfer Protocol (SFTP).

Correo Electrónico

Laravel incluye una API de correo electrónico basada en la biblioteca SwiftMailer, que permite el envío de correo electrónico a través de un servicio de preferencia. Laravel soporta archivos adjuntos de correo electrónico y cola de correo electrónico.

Notificaciones

Laravel soporta el envío de notificaciones a través de varios canales, ya sean canales conocidos como SMS o Slack, o utilizando canales desarrollados por la comunidad de Laravel.

¿Cómo Funciona Laravel?

Para entender mejor lo que Laravel puede hacer, es importante entender cómo Laravel trata las solicitudes, por ejemplo, el ciclo de vida de las solicitudes. Como se ha comentado anteriormente, Laravel se basa en la arquitectura MVC, y responde a las solicitudes de los usuarios, que el controlador utiliza para recuperar y procesar los datos del modelo y presentar la información al usuario en una vista.

Una solicitud entra en una aplicación Laravel a través del archivo public/index.php, que carga el resto del framework y recupera una instancia de la aplicación Laravel. Después de la recuperación de la instancia de la aplicación, la solicitud se dirige al núcleo de la consola o al núcleo HTTP.

Entre otras tareas, el kernel define una selección de bootstrappers que realizan tareas que deben ser completadas antes de que tenga lugar la gestión de las solicitudes, así como la definición de cualquier middleware por el que deban pasar las solicitudes antes de su gestión. Entre estas tareas previas a la gestión se encuentra la carga de los proveedores de servicios necesarios para la aplicación.

Una vez que se ha completado el bootstrapping y se han registrado los proveedores de servicios, la solicitud pasa al router, que dirige la solicitud a una ruta o a un controlador. Además, el router ejecuta cualquier middleware específico de la ruta que sea necesario. Una vez que la solicitud pasa por todo el middleware requerido, la ejecución de un método de ruta o controlador devuelve una respuesta que pasa de nuevo por la cadena a la Vista.

¿Cómo se Empieza con Laravel?

Para empezar con Laravel, es necesario entender algunas de las estructuras y funcionalidades más importantes de Laravel.

Contenedores de Servicio

El contenedor de servicios es uno de los componentes principales de Laravel. Los contenedores de servicios gestionan las dependencias de las clases y la inyección de dependencias.

Contenedores de servicio Laravel. (Fuente: Christopher Rumpel)
Contenedores de servicio Laravel. (Fuente: Christopher Rumpel)

Los contenedores de servicio son donde un desarrollador une todo lo necesario para ejecutar una aplicación Laravel.

Proveedores de Servicios

Igualmente importantes son los proveedores de servicios de Laravel, que es donde se inyectan las clases y dependencias en los contenedores de servicios.

Fachadas

Una fachada es una interfaz estática para las clases vinculadas en el contenedor de servicios. Las fachadas facilitan el uso al proporcionar una sintaxis fácil de recordar como proxy para un nombre de clase largo.

Paquetes

Los paquetes son la forma de añadir funcionalidad a Laravel. Hay paquetes independientes y paquetes específicos de la aplicación. Los proveedores de servicios indican a Laravel dónde cargar los recursos de los paquetes.

Laravel, como muchas otras herramientas de desarrollo local, se apoya en Docker. Docker es una herramienta basada en contenedores que permite a los desarrolladores crear y desplegar más fácilmente sus aplicaciones. Usando contenedores Docker, un desarrollador empaqueta su aplicación con sus dependencias, y la despliega como un único paquete.

Interfaces de Línea de Comandos

Laravel incluye un conjunto de interfaces de línea de comandos (CLI). La Consola Artisan incluye comandos que ayudan a los desarrolladores a construir rápidamente el código esqueleto, simplificar y automatizar las tareas repetitivas, y completar más fácilmente la construcción de una aplicación. Sail es una interfaz de línea de comandos más ligera introducida en Laravel 8. Sail permite al desarrollador interactuar con Docker, el entorno de desarrollo por defecto de Laravel.

Laravel Artisan CLI. (Fuente: tutorialspoint.com)
Laravel Artisan CLI. (Fuente: tutorialspoint.com)

Eloquent

Eloquent es un mapeador objeto-relacional (ORM) que permite una fácil interacción con las bases de datos. Utilizando la arquitectura MVC, los modelos se corresponden con las tablas individuales de una base de datos. Con Eloquent, los desarrolladores pueden estar seguros de una rápida recuperación, inserciones y actualizaciones sencillas y una definición intuitiva de las relaciones.

Composer

Composer es una herramienta de gestión de dependencias de PHP a nivel de aplicación de terceros. Composer gestiona las bibliotecas, los módulos y los complementos que requiere una aplicación Laravel.

Homestead

Laravel Homestead es un entorno de desarrollo que permite el desarrollo en una máquina virtual proporcionando una caja Vagrant pre-empaquetada. Homestead incluye todo lo necesario para el desarrollo de aplicaciones Laravel, incluyendo PHP, MySQL, Nginx, Composer, Redis, y mucho más, por lo que el desarrollador no necesita instalar estos paquetes en su máquina local. Homestead requiere la instalación de Vagrant y VirtualBox o Parallels.

Kits de Inicio de Autenticación

Laravel incluye una serie de paquetes para ayudar a los desarrolladores a ponerse en marcha rápidamente. Antes de sumergirse en él, es posible que quieras revisar algunos de los muchos recursos disponibles para el aprendizaje de Laravel. Laravel incluye un par de paquetes de inicio para ayudar al desarrollador a implementar rápidamente la funcionalidad común.

Laravel Breeze es un kit de inicio de autenticación. Incluye funciones comunes de autenticación y de cuentas de usuario como el registro de usuarios, el inicio de sesión, la verificación por correo electrónico y la confirmación y el restablecimiento de la contraseña. Breeze también incluye un frontend javascript a través de Vue. Breeze tiene una capa de vista por defecto que utiliza plantillas Blade y CSS Tailwind.

Para funciones de autenticación más avanzadas, Laravel ofrece ahora Jetstream, introducido por primera vez en la versión 8. Además de las características que se encuentran en Breeze, Jetstream también ofrece funcionalidades avanzadas adicionales como la autenticación de dos factores, la gestión de la sesión, el soporte de la API a través de Laravel Sanctum, y la gestión opcional de equipo.

Para los desarrolladores que prefieren utilizar su propio frontend de autenticación, Laravel ofrece Fortify, un backend de autenticación que es agnóstico al frontend. Fortify es el  motor del kit de inicio de autenticación de Jetstream e incluye todas las funcionalidades de autenticación de Laravel (por ejemplo, registro de usuarios, inicio de sesión, verificación de correo electrónico, autenticación de dos factores, etc.). Fortify no es el motor subyacente de Laravel Breeze.

Laravel también ofrece autenticación basada en medios sociales (OAuth) a través de Laravel Socialite.

Para los desarrolladores que quieren desplegar sus aplicaciones con una configuración mínima del servidor o, de hecho, quieren un despliegue sin servidor, Laravel ofrece Forge y Vapor. Forge permite el despliegue a través de una variedad de proveedores de infraestructura con mínimos esfuerzos de configuración. Vapor es una plataforma de despliegue sin servidor basada en AWS.

Para aquellos que buscan dar el siguiente paso, los desarrolladores pueden desplegar sus aplicaciones Laravel a través de su propio sitio web auto-alojado. Esto se debe a que el auto-alojamiento de tu sitio web requerirá que configures varias bases de datos definidas con un solo comando PHP (utilizando la última versión) y acceso SSH al servidor. Laravel ofrece ambas cosas en un marco de trabajo PHP de código abierto y, como ventaja adicional, es bastante fácil de instalar.

¿Qué Más Puede Hacer Laravel?

La mejor pregunta podría ser: «¿Qué no puede hacer Laravel?» Existen miles de paquetes que realizan cualquier número de funciones. Algunos de los paquetes oficiales más interesantes de Laravel son:

Cashier y Spark

Laravel Cashier proporciona una interfaz para los servicios de facturación de suscripciones de Stripe y Paddle. Cashier también proporciona funcionalidades avanzadas de suscripción, como cupones y periodos de gracia de cancelación.

Cashier es el motor de Laravel Spark, un panel de gestión de facturación que permite a los usuarios crear y gestionar sus suscripciones. Spark también está limitado a Stripe y Paddle como proveedores de pago; los proveedores personalizados aún no son compatibles con Spark. Sin embargo, Spark permite al desarrollador elegir su frontend.

Valet

Laravel Valet es un entorno de desarrollo para macOS centrado en la velocidad y el uso mínimo de recursos (alrededor de 7 MB de RAM). Valet no pretende ser un reemplazo completo de Sail u Homestead. En cambio, está pensado para usuarios con necesidades específicas y limitaciones de recursos.

Para ver más paquetes, consulta el sitio web de Laravel o Packalyst.

Laravel en 2024

La versión actual de Laravel es la versión 9, que se lanzó inicialmente en febrero de 2022. Esta versión incluye una serie de nuevas funcionalidades y mejoras. Algunas de las nuevas funcionalidades de la versión 8 incluyen Laravel Jetstream, job batching (permite la ejecución de un lote de trabajos, seguido de la realización de acciones definidas), Dynamic Blade components (permite la renderización de componentes en tiempo de ejecución basada en un valor de tiempo de ejecución), y el uso de Tailwind CSS por defecto en el paginador de Laravel, entre otras. También se han introducido mejoras en la limitación de tasas y en el modo de mantenimiento.

Antes, los nuevos lanzamientos de Laravel se realizaban cada seis meses. Sin embargo, esto dio lugar a muchas preguntas, comentarios y confusión sobre el nuevo proceso de lanzamiento de Laravel. Con el lanzamiento de Laravel 9 en febrero de 2022, el framework ha pasado a tener un ciclo de lanzamiento mayor de 12 meses.

Resumen

Los desarrolladores que buscan un desarrollo de aplicaciones web rápido y sencillo deberían considerar el aprendizaje de Laravel. Laravel proporciona un amplio y robusto conjunto de recursos que simplifica el proceso de desarrollo al eliminar la necesidad de codificar muchas tareas comunes desde cero.

Laravel también proporciona un entorno de desarrollo virtual seguro e interfaces de línea de comandos intuitivas. Y como Laravel es sencillo de aprender y cuenta con una sólida comunidad de apoyo y un ecosistema, es una opción natural para muchos desarrolladores, ya sean principiantes o expertos con años de experiencia.