Symfony vs. Laravel: Welches PHP-Framework sollte man wählen?

Bei Symfony und Laravel handelt es sich um die beliebtesten PHP-Frameworks. Beide sind ausgereift und in der Praxis erprobt und haben jeweils eigene Vor- und Nachteile. Wir erklären, wie PHP-Frameworks funktionieren und für welche Projekte Laravel bzw. Symfony besser geeignet ist.

Was ist PHP, und welche PHP-Frameworks gibt es?

Bei der Veröffentlichung von PHP Mitte der 1990er-Jahre handelte es sich um die erste dedizierte Web-Programmiersprache. Die „Personal Home Page Tools“, wie die Sprache zunächst hieß ermöglichte auf unkomplizierte Weise, ein HTML-Dokument dynamisch auf dem Server zusammenzubauen. Schauen wir uns an, was genau damit gemeint ist.

HTML-Dokumente bilden die Grundlage der im Netz anzutreffenden Informationen. Den eigentlichen Inhalten wird durch HTML-Tags eine Struktur verliehen. Interessant wird HTML, wenn programmatisch dynamische Inhalte in die statische Struktur eingefügt werden. Genau in diesem Punkt war PHP revolutionär. Die Sprache lässt sich in HTML und andere Textdokumente einbetten. Die statische Struktur bleibt erhalten, dynamische Informationen werden durch zwischen speziellen „PHP-Tags“ eingesetzten Code eingefügt. So lässt sich beispielsweise der Name eines Users in der Willkommensnachricht anzeigen:

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

Sie möchten mehr über die Skriptsprache erfahren? Im PHP-Tutorial finden Sie alle Grundlagen und die ersten Schritte.

Der wiederkehrende Bedarf nach Webanwendungs-Funktionen wie Datenbank-Anbindung, User-Authentifizierung und Formular-Validierung führte zum Erscheinen von PHP-Web-Frameworks. Konzeptuell angesiedelt zwischen Programmier-Bibliothek und Content-Management-System, eignen sich die enthaltenen Schichten und Komponenten zum Zusammensetzen größerer Systeme. Mittlerweile gibt es neben Laravel und Symfony eine Reihe anderer ausgereifter PHP-Frameworks:

  • CakePHP, 2005
  • Symfony, 2005
  • CodeIgniter, 2006
  • Laminas Project – vormals Zend Framework, 2006
  • Yii, 2008
  • Laravel, 2011
Tipp

Sie möchten auch ins Webdesign einsteigen? Erstellen Sie Ihre Website mit eigener Domain – mit MyWebsite Now von IONOS.

Symfony vs. Laravel

Die PHP-Webframeworks Laravel und Symfony haben viel gemeinsam. Beide werden als Open-Source-Projekte entwickelt und eignen sich zum Erstellen serverbasierter Webanwendungen. Dabei kommt bei Laravel und Symfony das „Model-View-Controller (MVC)“-Muster zum Einsatz, um eine Trennung der kritischen Belange zu gewährleisten. Anfragen an die Webanwendung werden von einem Controller verarbeitet, welcher Daten über das Model verwaltet und auf dem View präsentiert:

  • Model: Datenmodell und -verwaltung
  • View: Nutzeroberfläche
  • Controller: Schnittstelle zwischen Model und View

Sowohl Laravel als auch Symfony haben maßgeblich dazu beigetragen, die Entwicklung des PHP-Ökosystems voranzutreiben. So sind aus beiden Frameworks wichtige PHP-basierte Technologien hervorgegangen, welche auch in anderen Projekten zum Einsatz kommen. Insbesondere ist Symfony für die modulare Struktur voneinander entkoppelter Komponenten berühmt. Selbst andere PHP-Frameworks, wie Yii und Laravel greifen auf Symfony-Komponenten zurück.

Mit „Composer“ existiert für PHP-Projekte in Laravel und Symfony eine solide Grundlage zur Paketverwaltung. Neben dem eigentlichen Framework lassen sich weitere Komponenten installieren und verwalten. Composer steht auf allen Server-Betriebssystemen zur Verfügung; so lässt sich PHP mit Composer auf Ubuntu einsetzen oder PHP-Composer in IONOS-Webhosting-Paketen nutzen.

Tipp

Nutzen Sie für eine eigene Website schnelles, sicheres Webhosting  inklusive Domain – mit den Webhosting-Paketen von IONOS.

Wir beziehen uns hier auf die Framework-Versionen Laravel 4+ und Symfony 2/3. Ältere Versionen waren komplett anders aufgebaut. Betrachten wir die folgenden Merkmale von Laravel und Symfony im Detail:

Merkmale Symfony Laravel
Templating Twig Blade
ORM Doctrine Eloquent
CLI bin/console artisan
Konfiguration YAML PHP

Templating in Laravel und Symfony

PHPs Idee des „Template“ als Vorlage, welche statische und dynamische Bestandteile kombiniert, war revolutionär. Zuvor musste der gesamte HTML-Code programmatisch über String-Konkatenation aus statischen Teilen und dynamisch erzeugten Werten kombiniert werden. Dieser Ansatz war aufwendig und fehleranfällig, da schwer zu überblicken.

Neben dem Einbetten von Code in statischen Texten trugen die sogenannten „Includes“ maßgeblich zum Erfolg von PHP bei. Der include-Befehl ermöglicht das Zusammenfügen einer Seite aus mehreren Versatzstücken. So lassen sich konsistente Layouts realisieren, etwa mehrere Seiten mit unterschiedlichem Inhalt aber demselben Navigationsmenü.

Tipp

Ihnen ist PHP zu komplex? Erstellen Sie ganz einfach Ihre eigene Website. Mit dem Homepage-Baukasten von IONOS.

Beim Templating geht also um das Erzeugen von HTML-Dokumenten aus statischen Vorlagen und dynamischen Bestandteilen. Nutzt man PHP direkt als Template-Sprache offenbaren sich schnell ernsthafte Nachteile. Da sich innerhalb einer PHP-Datei HTML, PHP, SQL, CSS und JavaScript vermischen lassen, ergibt sich eine mangelnde Trennung der Belange. Ferner ergeben sich Sicherheitslücken durch SQL-Injection und Cross-Site-Scripting (XSS).

Um diesen negativen Effekten vorzubeugen, bringen sowohl Laravel als auch Symfony eigene Template-Sprachen mit. Diese nehmen Daten entgegen und rendern HTML. Dabei bleibt eine saubere Trennung der Belange gewährleistet; die Ausgabe wird automatisch durch sogenanntes „Escaping“ bereinigt, Code-Injection damit vorgebeugt. Die erzeugten PHP- oder HTML-Dokumente lassen sich in einem Cache zwischenspeichern.

Die Template Sprache von Symfony („Twig“) erlaubt das Erstellen komplexer Dokumentenfamilien, inklusive Layouts, Partials und Komponenten. Twig enthält viele nützliche Filter und Funktionen und setzt auf eine leicht zu erlernende Syntax. Wir erzeugen dynamisch eine Liste von Benutzern:

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

Laravel setzt auf die eigens entwickelte „Blade“-Template-Sprache. Im Unterschied zu Twig dürfen Blade-Templates beliebigen PHP-Code enthalten. So wie in Twig werden Ausdrücke zwischen doppelten geschweiften Klammern evaluiert und das Ergebnis ausgegeben. Das gleiche Beispiel in Blade:

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

Webanwendungen in Laravel und Symfony

Templates sind ausreichend für rein informative Websites ohne Funktionalität. Eine Seite wird beim Abruf auf dem Server zusammengebaut und an Besucherinnen und Besucher ausgeliefert. Mit einem Cache-Layer versehen, hat man bereits eine passable Lösung. Webanwendungen erfordern jedoch ein weitergehendes Konzept.

Eine klassische „Web 2.0“-Webanwendung erfordert für gewöhnlich, dass sich Nutzerinnen und Nutzer anmelden, Inhalte erstellen und ändern können. Anders gesagt wird eine Datenbank-Anwendung mit den wichtigsten CRUD-Datenbankoperationen benötigt. Damit dies für mehrere User sinnvoll funktioniert, benötigt man Ansätze für Authentifizierung, Rechteverwaltung und Session-Management.

Prinzipiell enthält PHP die benötigten Bausteine. So bringt die Sprache Funktionen mit, um auf Cookies zuzugreifen, Sessions zu verwalten und vieles mehr. Auch die Anbindung an eine Datenbank, das Ausführen von Abfragen und der Zugriff auf die Werte der HTTP-Anfrage lassen sich stemmen. Dabei kommen jedoch von Hause aus wenig abstrakte Low-Level-Funktionen und globale Variablen wie $_GET, $_POST und $_COOKIE zum Einsatz.

In der Praxis neigten Entwicklerteams bei jeder neuen Webanwendung dazu, das Rad neu zu erfinden. Dies führte zu vielfältigen Eigenentwicklungen, geplagt von Sicherheitslücken und fehlender Dokumentation. Was fehlte war ein standardisierter Ansatz, bzw. ein solider Baukasten, welcher die nötigen Komponenten in hoher Qualität enthält. Die logische Folge war die Entstehung von Webentwicklungs-Frameworks.

Tipp

Auch ohne PHP-Kenntnisse professionelle Ergebnisse mit IONOS erzielen: Jetzt eine eigene Firmenwebsite erstellen!

Ein Object-relational Mapping (ORM) fungiert als Schnittstelle zwischen objektorientiertem Code und relationaler Datenbank. Eine Web-App lebt von den Interaktionen der Nutzerinnen und Nutzer mit sich über der Zeit wandelnden Daten. Für gewöhnlich ist die Anwendungsschicht in einer objektorientierten Programmiersprache geschrieben, während die Speicherschicht auf einer relationalen Datenbank fußt. Sowohl Laravel als auch Symfony bringen eine eigene ORM-Implementierung mit.

Das in Symfony zum Einsatz kommende ORM heißt „Doctrine“ und wird als eigenständiges Project verwaltet. Doctrine setzt auf das „Data Mapper“-Muster und umfasst mehrere Komponenten; so ist neben dem ORM auch eine Caching-Schicht vorhanden. Laravels „Eloquent“-ORM folgt dem „Active Records“-Muster und gilt als einfacher zu bedienen. Beide ORMs lassen sich mit einer Vielzahl verschiedener Datenbank-Backends verbinden.

App-Scaffolding in Laravel und Symfony

Sowohl Laravel als auch Symfony haben eine eigene Kommandozeilen-Schnittstelle (CLI) zur Projektverwaltung mit an Bord. Die CLI lässt sich zum Beispiel zum „App-Scaffolding“ einsetzen. Darunter versteht man den automatisierten Aufbau von Projekt-Strukturen, wie Model-View-Controller-Komponenten oder Datenbank-Modellen.

Laravels CLI mit Namen „artisan“ und Symfonys „bin/console“-Befehl enthalten eine Vielzahl nützlicher Kommandos. Logischerweise wird zunächst eine existierende Laravel- bzw. Symfony-App benötigt, bevor auf die CLI zugegriffen werden kann. Zur initialen Installation einer Laravel- oder Symfony-App kommt normalerweise Composer zum Einsatz.

Vor- und Nachteile von Laravel und Symfony zusammengefasst

Bei Laravel und Symfony handelt es sich um ausgereifte Web-Frameworks. Dabei gilt Laravel als einfacher und besser für kleinere Projekte geeignet. Die flache Lernkurve und schnell erzielte Resultate haben zum Erfolg des populärsten PHP-Frameworks beigetragen.

Symfony ist berühmt für seine voneinander entkoppelten Komponenten. Diese lassen sich zusammengenommen als Web-Framework einsetzen, oder individuell als Teil selbsterstellter Software. Während Laravel auf Einfachheit setzt, strebt Symfony Flexibilität an. Damit eignet sich das Framework besser für komplexe Projekte mit speziellen Anforderungen.

Wir präsentieren die Vor- und Nachteile im Vergleich Symfony vs. Laravel zusammengefasst:

Kriterium Symfony Laravel
Funktionsumfang +++ ++
Ausgereiftheit +++ +++
Einfachheit + ++
Flexibilität +++ +
Bedienbarkeit + +++
Community ++ +++
Fazit

Wann sollte man nun welches Framework verwenden? Kurz gesagt ist Laravel die bessere Wahl für Einstegerinnen und Einsteiger sowie kleinere Projekte. Symfony ist modular aufgebaut und lässt sich flexibel den jeweiligen Bedingungen anpassen. Es eignet sich damit besonders für komplexe Anwendungen.