4.3Symfony : componentes, Twig, Doctrine
Lo esencial en 30 segundos
- Symfony = componentes reutilizables : enrutamiento, formularios, seguridad, consola — utilizables juntos o por separado, incluso fuera de Symfony.
- Twig + Doctrine : plantillas
{{ }}, {% for %}escapadas por defecto, y base manipulada en entidades objeto con consultas preparadas automáticas. - Reflejo de Riad : mismos conceptos que Laravel (MVC, ORM, plantillas) — dominar uno facilita el otro, elegir según proyecto y mercado.
Minicaso seguido — Riad descubre Symfony en un cliente
Un cliente empresa de Riad, en Constantine, impone Symfony para su back-office : rigor, componentes probados, trazabilidad. Riad reencuentra sus referencias de Laravel con otros nombres — rutas hacia controladores, plantillas Twig en lugar de Blade, entidades Doctrine en lugar de modelos Eloquent — e incluso toma un componente Symfony (la consola) para un viejo script. Tercer hito del hilo : dos frameworks, mismas ideas, adaptabilidad pro.
Continuación del caso 4.1-4.2 — Riad se vuelve bilingüe Laravel/Symfony.
1. Una arquitectura en componentes
Symfony es el OTRO gran framework PHP, apreciado en la EMPRESA y en los grandes proyectos : riguroso, modular, diseñado para la complejidad. Su marca : COMPONENTES independientes (enrutamiento, formularios, seguridad, consola, HTTP, validación, inyección de dependencias…), cada uno probado por separado y reutilizable fuera de Symfony vía Composer. Muchos proyectos — incluido Laravel — usan componentes Symfony bajo el capó : es un pilar del ecosistema. Se adopta como framework completo o tomando piezas.
2. Twig y Doctrine
Twig es el motor de plantillas : {{ variable }}, {% for %}, {% if %}, herencia — con escape automático (anti-XSS), apreciado mucho más allá de Symfony. Doctrine es el ORM asociado : manipulamos entidades (objetos) en lugar de SQL, preparadas automáticas, relaciones, migraciones. Matiz de diseño : Doctrine sigue el patrón « Data Mapper » (entidades separadas de la persistencia) mientras Eloquent sigue « Active Record » (los modelos se persisten a sí mismos) — dos filosofías excelentes.
Laravel (accesible, productivo) frente a Symfony (riguroso, empresa) : dos opciones maduras y pro, MISMOS conceptos (MVC, enrutamiento, ORM, plantillas, seguridad). Riad elige según el contexto — empezar rápido, restricción empresa, mercado local — sin angustia : lo esencial se transfiere.
🔎 Ejemplo concreto — 🔎 Ejemplo concreto — Catálogo Symfony : controlador, Twig, Doctrine
Los tres gestos de Riad del lado Symfony :
Controlador → ruta /produits, muestra produits/index.html.twig
Twig → {% for p in produits %}{{ p.nom }} {% endfor %}
Doctrine → $repo->findBy(['categorie' => $cat]) // entidades, no SQL
Lectura : mismos roles que Laravel, vocabulario Symfony.
Lección : quien conoce uno lee el otro sin pánico.
Vocabulario de la sección
- Symfony
- El otro gran framework PHP (con Laravel), reputado riguroso, modular, apreciado en la empresa y en los grandes proyectos.
Ejemplo sencillo: El back-office empresa de Riad lo impone por su rigor.
Lo que no es: un microscript sin estructura ni tests.
Reflejo: ¿gran proyecto exigente? evaluar Symfony primero.
- Componentes Symfony
- Piezas independientes (enrutamiento, formularios, seguridad, consola…) utilizables por separado, incluso fuera de Symfony ; usadas bajo el capó por muchos, incluido Laravel.
Ejemplo sencillo: Riad instala solo el componente consola en un viejo script.
Lo que no es: un framework monolítico de tomar o dejar.
Reflejo: tomar vía Composer cuando todo el framework es demasiado.
- Twig (plantillas)
- Motor de plantillas Symfony : {{ }}, {% for %}, {% if %}, herencia — escape automático anti-XSS, apreciado más allá de Symfony.
Ejemplo sencillo: Riad itera {% for p in produits %} con presentación escapada.
Lo que no es: PHP lógico acumulado en la plantilla.
Reflejo: plantillas dedicadas a la presentación, lógica en otro lado.
- Doctrine (ORM)
- ORM asociado a Symfony : entidades objeto en lugar de SQL, preparadas automáticas, relaciones, migraciones ; enfoque Data Mapper.
Ejemplo sencillo: Riad lee $repo->findBy(['categorie' => $cat]) sin escribir el SELECT.
Lo que no es: SQL concatenado a mano en el controlador.
Reflejo: entidades para el negocio, repositorio para las consultas.
- Laravel frente a Symfony
- Dos excelentes frameworks maduros : Laravel accesible/productivo ; Symfony riguroso/modular/empresa. Mismos conceptos transferibles.
Ejemplo sencillo: Riad pasa de uno a otro traduciendo Blade↔Twig, Eloquent↔Doctrine.
Lo que no es: una elección angustiada y definitiva « para toda la vida ».
Reflejo: elegir según proyecto, equipo y mercado local.
En la práctica — En la práctica — Descubrir Symfony y sus componentes
- Entended la filosofía : riguroso, modular, en COMPONENTES reutilizables, apreciado en la empresa.
- Detectad Twig ({{ }}, {% for %}, escape automático) y Doctrine (entidades en lugar de SQL, relaciones, migraciones).
- Notad la diferencia de ORM : Doctrine (Data Mapper) frente a Eloquent (Active Record).
- Situad la elección Laravel/Symfony (productividad frente a rigor/empresa) : los conceptos se transfieren.
Guion listo para decir — tranquilizar sobre la elección Symfony (30 s)
« Soy Riad : Symfony nos da componentes probados, plantillas Twig seguras y Doctrine para nuestras entidades — el rigor que espera este cliente empresa. Y nuestros logros Laravel se transfieren : mismos conceptos, otro vocabulario. »
Para decir en reunión con el cliente ; mostrad la correspondencia Blade/Twig, Eloquent/Doctrine.
Modelo copiar-pegar — controlador Symfony + Twig + Doctrine (código probado)
findBy(['categorie' => 'informatique']);
return $this->render('produits/index.html.twig', ['produits' => $produits]);
}
}
// templates/produits/index.html.twig
// {% extends 'base.html.twig' %}
// {% block body %}{% for p in produits %}{{ p.nom }} — {{ p.prix }} DA {% endfor %}{% endblock %}
Proyecto empresa
Symfony completo : rigor, componentes seguridad/formularios, trazabilidad — como el cliente de Riad.
Viejo proyecto PHP
Tomad un componente (consola, validación, enrutamiento) vía Composer sin migrar todo.
Equipo Laravel
Traducid : Blade→Twig, Eloquent→Doctrine — la subida de nivel es rápida.
Elección por decidir
Arranque rápido e independiente : Laravel ; gran sistema empresa : Symfony.
.env, nunca en duro. Contenido pedagógico, ejemplos con datos ficticios.✓ Buenas prácticas
- Ver Symfony como componentes reutilizables.
- Reencontrar los conceptos conocidos con otros nombres.
- Elegir según proyecto y mercado, sin dogma.
✗ Errores frecuentes
- Oponer Laravel y Symfony en bandos.
- Poner lógica en Twig.
- Angustiarse por la « buena elección » definitiva.
Puntos clave
- SYMFONY = otro gran framework PHP : RIGUROSO, MODULAR, EMPRESA. Componentes reutilizables (incluso por Laravel).
- TWIG : {{ }}, {% for %}, escape automático. DOCTRINE : entidades en lugar de SQL, relaciones, migraciones.
- Doctrine (Data Mapper) frente a Eloquent (Active Record) : dos enfoques excelentes.
- MISMOS CONCEPTOS (MVC, ORM, plantillas, enrutamiento, seguridad) — transferibles. Dominar uno facilita el otro.
Desafío 48h — aplicad mañana
Mostrad 1 lista vía Twig + Doctrine (controlador → findBy → bucle {% for %}) e instalad 1 componente solo vía Composer.
- Puedo citar componentes, Twig, Doctrine.
- Sé explicar Data Mapper frente a Active Record.
- Tengo 1 página Symfony que muestra entidades.
Preguntas frecuentes
Laravel o Symfony : ¿cuál aprender — es tan importante?
Ambos son excelentes y maduros ; lo que más cuenta son los CONCEPTOS transferibles (MVC, ORM, plantillas, enrutamiento, seguridad). Laravel : accesible, productivo, amable — a menudo aconsejado para empezar. Symfony : riguroso, modular, empresa/grandes proyectos. Elegid según proyecto, equipo y mercado local — y sabed pasar de uno a otro : es factible justamente porque las ideas son las mismas.
¿Por qué Symfony es un conjunto de « componentes » — y por qué es importante?
Porque cada componente (enrutamiento, formularios, seguridad, consola…) es autónomo, probado por separado y reutilizable fuera de Symfony vía Composer — modularidad, flexibilidad (framework completo o piezas tomadas) y rol de pilar del ecosistema (otros proyectos los usan). Es una buena arquitectura a escala del framework, y una caja de herramientas para todo proyecto PHP.
¿Cuál es la característica principal de Symfony?