4.3 · Symfony : componentes, Twig, Doctrine

Nivel 4 · Frameworks & API

4.3Symfony : componentes, Twig, Doctrine

Objetivo: Conocer Symfony (componentes, Twig, Doctrine), su filosofía (rigor, modularidad, empresa) y su complementariedad con Laravel — para seguir adaptable.
Tiempo estimado: 12 min · lectura autónoma · Si solo tienes 5 min: lee «Lo esencial en 30s» + el esquema.

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.

Error frecuente de interpretación: « Laravel y Symfony son enemigos, hay que elegir bando ». No. Son dos implementaciones maduras de las mismas ideas (MVC, ORM, plantillas, enrutamiento, seguridad), ligadas técnicamente (Laravel usa componentes Symfony). Oponerlos hace perder lo esencial : los conceptos transferibles. El buen reflejo es bilingüe — entender ambas filosofías y elegir según el proyecto, no según la tribu.
Symfony : componentes + dúo Twig/Doctrine Piezas independientes, mismos conceptos ComponentesEnrutamiento, formularios, seguridad, consola+TwigPlantillas seguras, herencia+DoctrineEntidades objeto, relaciones, migraciones Framework completo o piezas tomadas vía Composer.
Piezas independientes, mismos conceptos
Versión en texto del esquema (SEO / lectores de pantalla / traducción): 1) Riad ve Symfony como un juego de componentes independientes, reutilizables incluso fuera del framework. 2) Twig muestra con escape automático y herencia. 3) Doctrine manipula entidades objeto con preparadas automáticas y migraciones. Lección : mismos conceptos que Laravel con otros nombres — la adaptabilidad antes que el bando.

🔎 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

    1. Entended la filosofía : riguroso, modular, en COMPONENTES reutilizables, apreciado en la empresa.
    2. Detectad Twig ({{ }}, {% for %}, escape automático) y Doctrine (entidades en lugar de SQL, relaciones, migraciones).
    3. Notad la diferencia de ORM : Doctrine (Data Mapper) frente a Eloquent (Active Record).
    4. Situad la elección Laravel/Symfony (productividad frente a rigor/empresa) : los conceptos se transfieren.
    Conocéis Symfony (componentes, Twig, Doctrine) y su complementariedad con Laravel — adaptable en ambos ecosistemas.

    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.

    Prudencia: El rigor no inmuniza : validad los formularios (componente Validator), mantened Twig escapado por defecto y los secretos en .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.

    Lista de salida de la sección
    • Puedo citar componentes, Twig, Doctrine.
    • Sé explicar Data Mapper frente a Active Record.
    • Tengo 1 página Symfony que muestra entidades.
    Autoevaluación 1-5 : ¿mis plantillas están sin lógica?¿puedo pasar de Eloquent a Doctrine sin pánico?

    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.

    Comprueba tu comprensión

    ¿Cuál es la característica principal de Symfony?

    Recursos adicionales (opcional, para ir más allá)

    Examen del nivel 4Preguntas inéditas y más difíciles para validar tus conocimientos