# Symfony

Symfony ist ein in PHP geschriebenes Webframework und eine Menge von wiederverwendbaren PHP-Komponenten/Bibliotheken. Symfony wurde am 18. Oktober 2005 unter der MIT-Lizenz veröffentlicht.

## Geschichte und Philosophie

Symfony wird seit 2005 unter der Führung von Fabien Potencier entwickelt. Es entstand parallel zur steigenden Popularität von Ruby on Rails und dem Wunsch nach einem ähnlichen MVC-Framework auf PHP-Basis. Symfony versucht die Konfiguration auf ein Minimum zu beschränken. Wenn keine Konfiguration dafür angegeben ist, erfolgt die Zuordnung von z. B. Models zu Datenbanktabellen über die Namensgleichheit in Singular und Plural (Konvention vor Konfiguration). Durch die Konsolenanwendung können einfache Webseiten mittels Rapid Application Development entwickelt werden.
Version 2 ist im Juli 2011 erschienen. Sie stellt eine Neuimplementierung dar, die sich gänzlich von Version 1 unterscheidet. Eine einfache Möglichkeit, Anwendungen von Version 1 nach Version 2 zu migrieren, existiert nicht. Das Framework besteht nun aus Modulen, sogenannten Bundles, welche voneinander vollkommen unabhängig lauffähig sind, aber nahtlos in den Framework-Prozess integriert werden können. Durch die Verwendung eines Dependency Injection Containers ist die gesamte Anwendung modular aufgebaut. Dies bewirkt eine einfache Testbarkeit und Erweiterbarkeit. Außerdem werden Namespaces unterstützt. Somit erfordert Symfony 2 PHP 5.3 oder höher.

### Bundles

Bundles sind voneinander gelöste Einheiten einer Webapplikation. Ein fiktives Gästebuch-Bundle enthält demnach alle Daten, die zur vollständigen Lauffähigkeit des Gästebuchs dienen. Dazu gehört nicht nur die erforderliche Anwendungslogik, sondern auch Datenbankabfragen und Ressourcen (Grafiken, Scripts etc.). Entwickler können entwickelte Bundles veröffentlichen, so dass andere Nutzer von Symfony diese Applikationseinheiten ohne direkte Codeänderungen integrieren können.

## Merkmale

* Konfiguration mit YAML, Annotations, XML oder PHP
* Datenbankzugriff über ORM-Layer
* Scaffolding von CRUD-Interfaces
* Request-Dispatcher und dynamisches Routing für Clean URLs
* Templates auf Basis von Twig oder nativer PHP-Syntax
* Helper vereinfachen die Arbeit in den Templates (Ajax, JavaScript, Formulare uvm.)
* Mehrsprachigkeit und I18N-Support
* Datenvalidierung über Constraints
* Filtern von über Formulare eingespeistem Schadcode
* Komponenten für Session-Verwaltung, Request-Handling und Security
* Umfassendes Caching der Ausgabe
* Pluginfähig mit Bundles

## Schichten

Das Entwurfsmuster Model-View-Controller wird von Symfony wie folgt umgesetzt:

### Modell

Zur Speicherung der Objekte kommen zwei Plugins zur Auswahl (Doctrine und Propel) mit. Dabei handelt es sich um Bibliotheken zur objektrelationalen Abbildung, die PHP-Objekte in einer relationalen Datenbank speichern.
Die Beziehungen zwischen verschiedenen Modellen werden über sogenannte Associations festgelegt.
Ab der Version 1.1 von Symfony wurde das bisherige Standardframework Propel in ein Plugin ausgelagert und ist nicht mehr fester Bestandteil des Frameworks.

### View

Unter einem View versteht man die Präsentationsschicht der Applikation. In der View-Schicht werden mit Hilfe des Controllers Inhalte bereitgestellt, die oftmals Templates für die Ausgabe einbeziehen. Dabei kann beliebiger PHP-Code in einem Template eingebettet werden. Symfony bringt sogenannte Helper mit, welche bestimmte Ausgaben in Templates erstellen oder formatieren können, etwa Links oder Formulare. Für sich wiederholende Ausgaben kann man auf Partials zurückgreifen, welche innerhalb der Templates iterierbar sind.

### Controller

Der Controller formuliert die Geschäftslogik und bietet Schnittstellen in Form von Methoden, die mit der Logik interagieren. Diese Schnittstellen/Methoden werden wie in vielen anderen Frameworks auch Actions genannt. Es können auch Parameter für die Methoden übergeben werden. Die Struktur der URLs kann mit Hilfe von Routen flexibel angepasst werden.

## Versionen

| Version | Erscheinungsdatum | Support | Support bis | PHP Version | Bemerkungen |
| Ältere Version; nicht mehr unterstützt: 1.0 | Januar 2007 | 3 Jahre | Januar 2010 | >= 5.0 | |
| Ältere Version; nicht mehr unterstützt: 1.1 | Juni 2008 | 1 Jahr | Juni 2009 | >= 5.1 | Sicherheitsrelevante Updates bis Juni 2010 |
| Ältere Version; nicht mehr unterstützt: 1.2 | Dezember 2008 | 15 Monate | Februar 2010 | >= 5.2 | |
| Ältere Version; nicht mehr unterstützt: 1.3 | November 2009 | 1 Jahr | November 2010 | >= 5.2 | Wie 1.4, jedoch mit Kompatibilitäts-Ebene für bestehende Symfony-Projekte |
| Ältere Version; nicht mehr unterstützt: 1.4 | November 2009 | 3 Jahre | November 2012 | >= 5.2 | |
| Ältere Version; nicht mehr unterstützt: 2.0 | Juli 2011 | 20 Monate | März 2013 | >= 5.3.2 | Umstieg auf PHP 5.3 |
| Ältere Version; nicht mehr unterstützt: 2.1 | September 2012 | 9 Monate | Mai 2013 | >= 5.3.3 | Überarbeitete Form-Komponente, Einsatz von Composer |
| Ältere Version; nicht mehr unterstützt: 2.2 | März 2013 | 8 Monate | November 2013 | >= 5.3.3 | Überarbeitete Form-Komponente, Einsatz von Composer |
| Ältere Version; nicht mehr unterstützt: 2.3 | Mai 2013 | 3 Jahre | Mai 2016 | >= 5.3.3 | Erste LTS (Long Term Support) Version |
| Ältere Version; nicht mehr unterstützt: 2.4 | November 2013 | 8 Monate | Juli 2014 | >= 5.3.3 | |
| Ältere Version; nicht mehr unterstützt: 2.5 | Mai 2014 | 8 Monate | Januar 2015 | >= 5.3.3 | |
| Ältere Version; nicht mehr unterstützt: 2.6 | November 2014 | 8 Monate | Juli 2015 | >= 5.3.3 | |
| Ältere Version; nicht mehr unterstützt: 2.7 | Mai 2015 | 3 Jahre | Mai 2018 | >= 5.3.9 | Zweite LTS (Long Term Support) Version |
| Ältere Version; nicht mehr unterstützt: 2.8 | November 2015 | 3 Jahre | November 2018 | >= 5.3.9 | LTS (Long Term Support) Version |
| Ältere Version; nicht mehr unterstützt: 3.0 | November 2015 | 8 Monate | Juli 2016 | >= 5.5 | |
| Ältere Version; nicht mehr unterstützt: 3.1 | Mai 2016 | 8 Monate | Januar 2017 | >= 5.5 | PSR-6 kompatible Cache-Komponente, LDAP Unterstützung |
| Ältere Version; nicht mehr unterstützt: 3.2 | November 2016 | 8 Monate | Juli 2017 | >= 5.5.9 | |
| Ältere Version; nicht mehr unterstützt: 3.3 | März 2017 | 8 Monate | Januar 2018 | >= 5.5.9 | |
| Ältere Version; nicht mehr unterstützt: 3.4 | November 2017 | 3 Jahre | November 2020 | >= 5.5.9 | LTS (Long Term Support) Version |
| Ältere Version; nicht mehr unterstützt: 4.0 | November 2017 | 8 Monate | Juli 2018 | >= 7.1.3 | |
| Ältere Version; nicht mehr unterstützt: 4.1 | Mai 2018 | 8 Monate | Januar 2019 | >= 7.1.3 | |
| Ältere Version; nicht mehr unterstützt: 4.2 | November 2018 | 8 Monate | Juli 2019 | >= 7.1.3 | Nur noch Sicherheits-Updates bis Januar 2020 |
| Ältere Version; nicht mehr unterstützt: 4.3 | Mai 2019 | 8 Monate | Januar 2020 | >= 7.1.3 | Sicherheits-Updates bis Juli 2020 |
| Ältere Version; nicht mehr unterstützt: 4.4 | November 2019 | 3 Jahre | November 2022 | >= 7.1.3 | LTS (Long Term Support) Version, Sicherheits-Updates bis November 2022 |
| Ältere Version; nicht mehr unterstützt: 5.0 | November 2019 | 8 Monate | Juli 2020 | >= 7.2.5 | |
| Ältere Version; nicht mehr unterstützt: 5.1 | Mai 2020 | 8 Monate | Januar 2021 | >= 7.2.5 | |
| Ältere Version; nicht mehr unterstützt: 5.2 | November 2020 | 8 Monate | Juli 2021 | >= 7.2.5 | |
| Ältere Version; nicht mehr unterstützt: 5.3 | Mai 2021 | 8 Monate | Januar 2022 | >= 7.2.5 | |
| Ältere Version; noch unterstützt: 5.4 | November 2021 | 3 Jahre | November 2024 | >= 7.2.5 | LTS (Long Term Support) Version, Sicherheits-Updates bis November 2025 |
| Ältere Version; nicht mehr unterstützt: 6.0 | November 2021 | 14 Monate | Januar 2023 | >= 8.0.2 | |
| Ältere Version; nicht mehr unterstützt: 6.1 | Mai 2022 | 8 Monate | Januar 2023 | >= 8.1.0 | |
| Ältere Version; nicht mehr unterstützt: 6.2 | November 2022 | 8 Monate | Juli 2023 | >= 8.1.0 | |
| Ältere Version; nicht mehr unterstützt: 6.3 | Mai 2023 | 8 Monate | Januar 2024 | >= 8.1.0 | |
| Aktuelle Version: 6.4 | November 2023 | 3 Jahre | November 2026 | >= 8.1.0 | LTS (Long Term Support) Version, Sicherheits-Updates bis November 2027 |
| Ältere Version; nicht mehr unterstützt: 7.0 | November 2023 | 8 Monate | Juli 2024 | >= 8.2.0 | |
| Ältere Version; nicht mehr unterstützt: 7.1 | Mai 2024 | 8 Monate | Januar 2025 | >= 8.2.0 | |
| Aktuelle Version: 7.2 | November 2024 | 8 Monate | Juli 2025 | >= 8.2.0 | |
| Zukünftige Version: 7.3 | Mai 2025 | 8 Monate | Januar 2026 | >= 8.2.0 | |
| Legende:Ältere Version; nicht mehr unterstütztÄltere Version; noch unterstütztAktuelle VersionAktuelle VorabversionZukünftige Version ||||||
Aktuellere Informationen finden sich auf der Webseite symfony.com/releases.

## Verwendung

* Drupal ab Version 8
* eZ Publish ab Version 5
* Silex (Framework)
* phpBB ab Version 3.1
* Contao ab Version 4
* Shopware ab Version 5
* Akeneo ab Version 1
* Magento ab Version 2.0
* orocrm ab Version 1
* Pimcore ab Version 5
* Sylius ab Version 1
* Zikula ab Version 1.3