Drupal Symfony foundation: relazione

Drupal e Symfony

Dalla versione 8 (2015) Drupal si basa profondamente su componenti Symfony: HttpKernel, EventDispatcher, DependencyInjection, Routing, HttpFoundation, Console, Yaml, Serializer. Capire la relazione tra i due framework aiuta a scrivere codice Drupal moderno e a riusare conoscenze tra progetti Symfony e Drupal.

Componenti Symfony in Drupal

  • HttpKernel: gestisce il ciclo di richiesta/risposta
  • HttpFoundation: oggetti Request e Response
  • Routing: dispatch URL a controller
  • DependencyInjection: container di servizi
  • EventDispatcher: pattern observer per estendere il flusso
  • Yaml: parser YAML usato per config/services/routing
  • Console: usato da Drupal Console e Drush
  • Serializer: JSON, XML per REST/JSON:API

Cosa Drupal aggiunge

Symfony e' un framework agnostico; Drupal e' un CMS prodotto su Symfony. Drupal aggiunge:

  • Entity API e Field API (sistema entità generico)
  • Plugin API e Annotation-based discovery
  • Configuration management (config export/import)
  • Cache API multilivello con cache tags/contexts
  • Render API con lazy builders e bubbling metadata
  • Theme system (Twig + suggestions hierarchy)
  • UI admin e content management

Routing comparato

Symfony usa attribute/annotation o YAML:

#[Route('/hello', name: 'hello')]
public function hello() { ... }

Drupal usa solo YAML (no attribute al momento):

hello:
  path: '/hello'
  defaults:
    _controller: '...::hello'
  requirements:
    _permission: 'access content'

Container e service

Drupal espone il container Symfony con servizi tipo entity_type.manager, config.factory, current_user. Si registrano custom in mymodule.services.yml identicamente a Symfony.

Versioni Symfony

  • Drupal 9: Symfony 4 (poi 5)
  • Drupal 10: Symfony 6.x
  • Drupal 11: Symfony 7.x

L'allineamento alle versioni Symfony LTS guida la roadmap Drupal.

Cosa NON e' Symfony

Drupal NON usa Doctrine ORM (ha la sua Entity API/storage), NON usa Twig in modo identico (ha render API con metadata), NON ha la stessa filosofia di MVC stretta. Un sviluppatore Symfony pure troverà Drupal più "opinionato" e meno flessibile in alcuni aspetti core.

Skill transferibili

Conoscenze direttamente trasferibili:

  • DI e container
  • Event subscriber
  • Form types (parzialmente)
  • Console commands (Drush usa Symfony Console)
  • Serializer e REST

Conclusione

Drupal e' un CMS completo costruito su solidissime fondamenta Symfony. La sinergia produce un prodotto stabile, ben architettato e con un'enorme community condivisa con l'ecosistema PHP moderno.

Hai bisogno di aiuto?

Se vuoi un sito Drupal performante dal team di G Tech Group, scrivici tramite il modulo di contatto.

Hai trovato utile quest'articolo?