Symfony vs. Laravel: ¿qué framework de PHP elegir?

Symfony y Laravel son los frameworks PHP más populares. Ambos son productos sólidos y puestos a prueba, cada uno con sus propias ventajas y desventajas. A continuación, explicamos cómo funcionan los frameworks PHP y para qué proyectos es más adecuado usar Laravel o Symfony.

¿Qué es PHP y qué frameworks de PHP existen?

Cuando se lanzó PHP a mediados de la década de 1990, fue el primer lenguaje de programación web dedicado. Las “Personal Home Page Tools”, como se llamaba inicialmente este lenguaje, permitía montar un documento HTML dinámicamente en el servidor de forma sencilla. Veamos qué significa exactamente esto.

Los documentos HTML constituyen la base de la información que se encuentra en la web. El contenido real está estructurado por etiquetas o tags de HTML. El HTML se vuelve interesante cuando el contenido dinámico se inserta mediante programación en la estructura estática, y PHP fue revolucionario precisamente en este aspecto. El lenguaje puede incrustarse en HTML y otros documentos de texto. Mientras la estructura estática permanece intacta, la información dinámica se añade a través de código insertado entre “etiquetas PHP” especiales. Por ejemplo, el nombre de un usuario puede aparecer en el mensaje de bienvenida:

<h1>
  Welcome back, <?php echo $user ?>
</h1>
PHP
Consejo

¿Quieres aprender más sobre el lenguaje de scripting? En el tutorial de PHP encontrarás la información necesaria para dar los primeros pasos.

La constante búsqueda de nuevas funcionalidades para las aplicaciones web, como la conectividad a bases de datos, la autenticación de usuarios y la validación de formularios, llevó a la aparición de frameworks web de PHP. Situados conceptualmente entre una biblioteca de programación y un sistema de gestión de contenidos, las capas y componentes que contiene son adecuados para ensamblar sistemas más grandes. Con el paso del tiempo, junto a Laravel y Symfony, también podemos nombrar otros frameworks PHP sólidos:

  • CakePHP, 2005
  • Symfony, 2005
  • CodeIgniter, 2006
  • Proyecto Laminas, antes Zend Framework, 2006
  • Yii, 2008
  • Laravel, 2011

Symfony vs. Laravel

Los frameworks web PHP Laravel y Symfony tienen mucho en común. Ambos se han desarrollado como proyectos de código abierto y son adecuados para crear aplicaciones web basadas en servidores. Laravel y Symfony utilizan el patrón “Modelo-Vista-Controlador (MVC)” para asegurar la separación de los intereses críticos. Las peticiones a la aplicación web son procesadas por un controlador, que gestiona los datos a través del modelo y los presenta en la vista:

  • Modelo: modelo y gestión de datos
  • Vista: interfaz de usuario
  • Controlador: interfaz entre el modelo y la vista

Tanto Symfony como Laravel han contribuido significativamente al desarrollo del ecosistema PHP. Así, de ambos marcos han surgido importantes tecnologías basadas en PHP, que también se utilizan en otros proyectos. En particular, Symfony es famosa por su estructura modular de componentes desacoplados. Incluso otros frameworks PHP, como Yii y Laravel, utilizan componentes de Symfony.

Composer proporciona una base sólida para la gestión de paquetes para proyectos PHP en Laravel y Symfony. Además del propio framework, se pueden instalar y gestionar otros componentes. Composer está disponible en todos los sistemas operativos de servidor, y ofrece la posibilidad de usar, por ejemplo, PHP Composer en Ubuntu o PHP Composer en los packs de hosting de IONOS.

Consejo

Si necesitas un hosting rápido y seguro con dominio incluido para tu página web, descubre los paquetes de alojamiento web de IONOS.

Aquí, nos referimos a las versiones del framework Laravel 4+ y Symfony 2/3. Las versiones anteriores tenían una estructura completamente diferente. Veamos las siguientes características de Laravel y Symfony en detalle:

Características Symfony Laravel
Plantilla Twig Blade
ORM Doctrine Eloquent
CLI bin/consola Artisan
Configuración YAML PHP

Plantillas en Laravel y Symfony

PHP y su idea de la “plantilla” como un modelo que combina componentes estáticos y dinámicos fue revolucionaria. Anteriormente, todo el código HTML tenía que combinarse mediante un programa que unía en cadenas las partes estáticas y los valores generados dinámicamente. Este enfoque era lento y propenso a errores porque era difícil de seguir.

Además de incrustar código en los textos estáticos, los “includes” contribuyeron significativamente al éxito de PHP. El comando “include” permite ensamblar una página a partir de varias piezas. Esto permite realizar diseños coherentes, como varias páginas con contenidos diferentes, pero con el mismo menú de navegación.

La creación de plantillas consiste en generar documentos HTML a partir de plantillas estáticas y componentes dinámicos. Al utilizar PHP directamente como lenguaje de plantillas, aparecen rápidamente graves desventajas, dado que HTML, PHP, SQL, CSS y JavaScript pueden mezclarse dentro de un archivo PHP y se da una falta de “separación de intereses”, es decir, no se dividen los programas internamente según sus objetivos o intereses. Además, se pueden generar brechas de seguridad debido a inyecciones SQL y Cross Site Scripting (XSS).

Para evitar estos efectos negativos, Laravel y Symfony vienen con sus propios lenguajes de plantillas que aceptan datos y renderizan HTML. Se garantiza una limpia separación de intereses; la salida se limpia automáticamente mediante el llamado “escape”, evitando así la inyección de código. Los documentos PHP o HTML generados pueden almacenarse temporalmente en caché.

El lenguaje de plantillas de Symfony (“Twig”) permite la creación de familias de documentos complejas, incluyendo diseños, parciales y componentes. Twig contiene muchos filtros y funciones útiles y se basa en una sintaxis fácil de aprender. Creamos dinámicamente una lista de usuarios:

<h1>Users</h1>
<ul>
    {% for user in users %}
        <li>[ user.name }}</li>
    {% endfor %}
</ul>
twig

Laravel se basa en el lenguaje de plantillas “Blade”, diseñado a medida. A diferencia de Twig, las plantillas Blade pueden contener cualquier código PHP. Pero, al igual que en Twig, las expresiones entre dobles corchetes se evalúan y el resultado se emite. El mismo ejemplo en Blade:

<h1>Users</h1>
<ul>
    @foreach ($users as $user)
        <li>{{ $user->id }}</li>
    @endforeach
</ul>
blade

Aplicaciones web en Laravel y Symfony

Las plantillas son suficientes para páginas web puramente informativas sin funcionalidad. Se monta una página en el servidor cuando se abre y se muestra a los visitantes, y si se dispone de una capa de caché, ya se tiene una solución pasable. Las aplicaciones web, sin embargo, requieren un concepto más amplio.

Una aplicación web clásica de la “Web 2.0” suele requerir que los usuarios puedan conectarse, crear y modificar contenidos. En otras palabras, se necesita una aplicación de base de datos que permita las operaciones CRUD más importantes. Para que esto funcione de manera significativa para múltiples usuarios, se necesitan recursos para la autenticación, la gestión de derechos y la gestión de sesiones.

En principio, PHP contiene los bloques de construcción necesarios. El lenguaje proporciona funciones para acceder a las cookies, gestionar las sesiones y mucho más. También se puede gestionar la conexión a una base de datos, la ejecución de consultas y el acceso a los valores de la petición HTTP. Sin embargo, se utilizan pocas funciones abstractas de bajo nivel y variables globales como $_GET, $_POST y $_COOKIE.

En la práctica, los equipos de desarrollo tendían a reinventar repetidamente las mismas herramientas con cada nueva aplicación web. Esto dio lugar a muchos desarrollos internos plagados de lagunas de seguridad y falta de documentación. Lo que faltaba era un enfoque estandarizado o un kit de construcción sólido que contuviera componentes necesarios de alta calidad. La consecuencia lógica fue la aparición de los frameworks de desarrollo web.

Un mapeo objeto-relacional (ORM) funciona como una interfaz entre el código orientado a objetos y una base de datos relacional. Una aplicación web se nutre de las interacciones de los usuarios con datos que cambian con el tiempo. Normalmente, la capa de aplicación se escribe en un lenguaje de programación orientado a objetos, mientras que la capa de almacenamiento se crea entorno a una base de datos relacional. En cuanto a Laravel y Symfony, ambos vienen con su propia implementación de ORM.

El ORM utilizado en Symfony se llama “Doctrine” y se gestiona como un proyecto independiente. Doctrine se basa en el patrón “Data Mapper” y consta de varios componentes; además del ORM, también hay una capa de caché. El ORM “Eloquent” de Laravel sigue el patrón de “Active Records” y se considera más fácil de usar. Ambos ORM pueden conectarse a una variedad de backends de bases de datos diferentes.

App Scaffolding en Laravel y Symfony

Laravel y Symfony tienen su propia interfaz de línea de comandos (CLI) para la gestión de proyectos. La CLI puede utilizarse, por ejemplo, para el App Scaffolding o “andamiaje de aplicaciones”. Se trata de la construcción automatizada de estructuras de proyecto, como componentes de modelo-vista-controlador o modelos de bases de datos.

El CLI de Laravel “artisan” y el comando “bin/console” de Symfony contienen una variedad de comandos útiles. Lógicamente, se requiere una aplicación Laravel o Symfony antes de poder acceder a la CLI. Para la instalación inicial de una aplicación Laravel o Symfony, se suele utilizar Composer.

Resumen de las ventajas y desventajas de Laravel y Symfony

Laravel y Symfony son frameworks web consolidados. Laravel se considera más simple y más adecuado para proyectos pequeños. La curva de aprendizaje acesible y los resultados obtenidos rápidamente han contribuido al éxito de este popular framework PHP.

Symfony es famosa por sus componentes desacoplados. Pueden utilizarse juntos como un framework web o individualmente como parte de un software de creación propia. Mientras que Laravel se centra en la simplicidad, Symfony se esfuerza por la flexibilidad. Esto hace que el marco sea más adecuado para proyectos complejos con requisitos especiales.

A continuación, presentamos un resumen de las ventajas y desventajas en una comparación de Symfony vs. Laravel:

Criterio Symfony Laravel
Alcance de las funciones +++ ++
Madurez +++ +++
Simplicidad + ++
Flexibilidad +++ +
Operatividad + +++
Comunidad ++ +++
En resumen

¿Cuándo hay que utilizar cada framework? En resumen, Laravel es la mejor opción para principiantes y proyectos más pequeños. Symfony tiene una estructura modular y puede adaptarse con flexibilidad a las condiciones existentes, y es, por lo tanto, especialmente adecuado para aplicaciones complejas.