Bei Symfony und Laravel handelt es sich um die be­lieb­tes­ten PHP-Frame­works. Beide sind aus­ge­reift und in der Praxis erprobt und haben jeweils eigene Vor- und Nachteile. Wir erklären, wie PHP-Frame­works funk­tio­nie­ren und für welche Projekte Laravel bzw. Symfony besser geeignet ist.

Was ist PHP, und welche PHP-Frame­works gibt es?

Bei der Ver­öf­fent­li­chung von PHP Mitte der 1990er-Jahre handelte es sich um die erste de­di­zier­te Web-Pro­gram­mier­spra­che. Die „Personal Home Page Tools“, wie die Sprache zunächst hieß er­mög­lich­te auf un­kom­pli­zier­te Weise, ein HTML-Dokument dynamisch auf dem Server zu­sam­men­zu­bau­en. Schauen wir uns an, was genau damit gemeint ist.

HTML-Dokumente bilden die Grundlage der im Netz an­zu­tref­fen­den In­for­ma­tio­nen. Den ei­gent­li­chen Inhalten wird durch HTML-Tags eine Struktur verliehen. In­ter­es­sant wird HTML, wenn pro­gram­ma­tisch dy­na­mi­sche Inhalte in die statische Struktur eingefügt werden. Genau in diesem Punkt war PHP re­vo­lu­tio­när. Die Sprache lässt sich in HTML und andere Text­do­ku­men­te einbetten. Die statische Struktur bleibt erhalten, dy­na­mi­sche In­for­ma­tio­nen werden durch zwischen spe­zi­el­len „PHP-Tags“ ein­ge­setz­ten Code eingefügt. So lässt sich bei­spiels­wei­se der Name eines Users in der Will­kom­mens­nach­richt anzeigen:

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

Sie möchten mehr über die Skript­spra­che erfahren? Im PHP-Tutorial finden Sie alle Grund­la­gen und die ersten Schritte.

Der wie­der­keh­ren­de Bedarf nach Web­an­wen­dungs-Funk­tio­nen wie Datenbank-Anbindung, User-Au­then­ti­fi­zie­rung und Formular-Va­li­die­rung führte zum Er­schei­nen von PHP-Web-Frame­works. Kon­zep­tu­ell an­ge­sie­delt zwischen Pro­gram­mier-Bi­blio­thek und Content-Ma­nage­ment-System, eignen sich die ent­hal­te­nen Schichten und Kom­po­nen­ten zum Zu­sam­men­set­zen größerer Systeme. Mitt­ler­wei­le gibt es neben Laravel und Symfony eine Reihe anderer aus­ge­reif­ter PHP-Frame­works:

  • CakePHP, 2005
  • Symfony, 2005
  • Cod­e­Ig­ni­ter, 2006
  • Laminas Project – vormals Zend Framework, 2006
  • Yii, 2008
  • Laravel, 2011
Tipp

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

Symfony vs. Laravel

Die PHP-Web­frame­works Laravel und Symfony haben viel gemeinsam. Beide werden als Open-Source-Projekte ent­wi­ckelt und eignen sich zum Erstellen ser­ver­ba­sier­ter Web­an­wen­dun­gen. Dabei kommt bei Laravel und Symfony das „Model-View-Con­trol­ler (MVC)“-Muster zum Einsatz, um eine Trennung der kri­ti­schen Belange zu ge­währ­leis­ten. Anfragen an die Web­an­wen­dung werden von einem Con­trol­ler ver­ar­bei­tet, welcher Daten über das Model verwaltet und auf dem View prä­sen­tiert:

  • Model: Da­ten­mo­dell und -ver­wal­tung
  • View: Nut­zer­ober­flä­che
  • Con­trol­ler: Schnitt­stel­le zwischen Model und View

Sowohl Laravel als auch Symfony haben maß­geb­lich dazu bei­getra­gen, die Ent­wick­lung des PHP-Öko­sys­tems vor­an­zu­trei­ben. So sind aus beiden Frame­works wichtige PHP-basierte Tech­no­lo­gien her­vor­ge­gan­gen, welche auch in anderen Projekten zum Einsatz kommen. Ins­be­son­de­re ist Symfony für die modulare Struktur von­ein­an­der ent­kop­pel­ter Kom­po­nen­ten berühmt. Selbst andere PHP-Frame­works, wie Yii und Laravel greifen auf Symfony-Kom­po­nen­ten zurück.

Mit „Composer“ existiert für PHP-Projekte in Laravel und Symfony eine solide Grundlage zur Pa­ket­ver­wal­tung. Neben dem ei­gent­li­chen Framework lassen sich weitere Kom­po­nen­ten in­stal­lie­ren und verwalten. Composer steht auf allen Server-Be­triebs­sys­te­men zur Verfügung; so lässt sich PHP mit Composer auf Ubuntu einsetzen oder PHP-Composer in IONOS-Web­hos­ting-Paketen nutzen.

Tipp

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

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

Merkmale Symfony Laravel
Tem­pla­ting Twig Blade
ORM Doctrine Eloquent
CLI bin/console artisan
Kon­fi­gu­ra­ti­on YAML PHP

Tem­pla­ting in Laravel und Symfony

PHPs Idee des „Template“ als Vorlage, welche statische und dy­na­mi­sche Be­stand­tei­le kom­bi­niert, war re­vo­lu­tio­när. Zuvor musste der gesamte HTML-Code pro­gram­ma­tisch über String-Kon­ka­te­na­ti­on aus sta­ti­schen Teilen und dynamisch erzeugten Werten kom­bi­niert werden. Dieser Ansatz war aufwendig und feh­ler­an­fäl­lig, da schwer zu über­bli­cken.

Neben dem Einbetten von Code in sta­ti­schen Texten trugen die so­ge­nann­ten „Includes“ maß­geb­lich zum Erfolg von PHP bei. Der include-Befehl er­mög­licht das Zu­sam­men­fü­gen einer Seite aus mehreren Ver­satz­stü­cken. So lassen sich kon­sis­ten­te Layouts rea­li­sie­ren, etwa mehrere Seiten mit un­ter­schied­li­chem Inhalt aber demselben Na­vi­ga­ti­ons­me­nü.

Tipp

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

Beim Tem­pla­ting geht also um das Erzeugen von HTML-Do­ku­men­ten aus sta­ti­schen Vorlagen und dy­na­mi­schen Be­stand­tei­len. Nutzt man PHP direkt als Template-Sprache of­fen­ba­ren sich schnell ernst­haf­te Nachteile. Da sich innerhalb einer PHP-Datei HTML, PHP, SQL, CSS und Ja­va­Script ver­mi­schen lassen, ergibt sich eine mangelnde Trennung der Belange. Ferner ergeben sich Si­cher­heits­lü­cken durch SQL-Injection und Cross-Site-Scripting (XSS).

Um diesen negativen Effekten vor­zu­beu­gen, bringen sowohl Laravel als auch Symfony eigene Template-Sprachen mit. Diese nehmen Daten entgegen und rendern HTML. Dabei bleibt eine saubere Trennung der Belange ge­währ­leis­tet; die Ausgabe wird au­to­ma­tisch durch so­ge­nann­tes „Escaping“ bereinigt, Code-Injection damit vor­ge­beugt. Die erzeugten PHP- oder HTML-Dokumente lassen sich in einem Cache zwi­schen­spei­chern.

Die Template Sprache von Symfony („Twig“) erlaubt das Erstellen komplexer Do­ku­men­ten­fa­mi­li­en, inklusive Layouts, Partials und Kom­po­nen­ten. Twig enthält viele nützliche Filter und Funk­tio­nen und setzt auf eine leicht zu er­ler­nen­de 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 ent­wi­ckel­te „Blade“-Template-Sprache. Im Un­ter­schied zu Twig dürfen Blade-Templates be­lie­bi­gen PHP-Code enthalten. So wie in Twig werden Ausdrücke zwischen doppelten ge­schweif­ten Klammern evaluiert und das Ergebnis aus­ge­ge­ben. Das gleiche Beispiel in Blade:

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

Web­an­wen­dun­gen in Laravel und Symfony

Templates sind aus­rei­chend für rein in­for­ma­ti­ve Websites ohne Funk­tio­na­li­tät. Eine Seite wird beim Abruf auf dem Server zu­sam­men­ge­baut und an Be­su­che­rin­nen und Besucher aus­ge­lie­fert. Mit einem Cache-Layer versehen, hat man bereits eine passable Lösung. Web­an­wen­dun­gen erfordern jedoch ein wei­ter­ge­hen­des Konzept.

Eine klas­si­sche „Web 2.0“-Web­an­wen­dung erfordert für ge­wöhn­lich, dass sich Nut­ze­rin­nen und Nutzer anmelden, Inhalte erstellen und ändern können. Anders gesagt wird eine Datenbank-Anwendung mit den wich­tigs­ten CRUD-Da­ten­bank­ope­ra­tio­nen benötigt. Damit dies für mehrere User sinnvoll funk­tio­niert, benötigt man Ansätze für Au­then­ti­fi­zie­rung, Rech­te­ver­wal­tung und Session-Ma­nage­ment.

Prin­zi­pi­ell enthält PHP die be­nö­tig­ten Bausteine. So bringt die Sprache Funk­tio­nen mit, um auf Cookies zu­zu­grei­fen, 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-Funk­tio­nen und globale Variablen wie $_GET, $_POST und $_COOKIE zum Einsatz.

In der Praxis neigten Ent­wick­ler­teams bei jeder neuen Web­an­wen­dung dazu, das Rad neu zu erfinden. Dies führte zu viel­fäl­ti­gen Ei­gen­ent­wick­lun­gen, geplagt von Si­cher­heits­lü­cken und fehlender Do­ku­men­ta­ti­on. Was fehlte war ein stan­dar­di­sier­ter Ansatz, bzw. ein solider Baukasten, welcher die nötigen Kom­po­nen­ten in hoher Qualität enthält. Die logische Folge war die Ent­ste­hung von Web­ent­wick­lungs-Frame­works.

Tipp

Auch ohne PHP-Kennt­nis­se pro­fes­sio­nel­le Er­geb­nis­se mit IONOS erzielen: Jetzt eine eigene Fir­men­web­site erstellen!

Ein Object-re­la­tio­nal Mapping (ORM) fungiert als Schnitt­stel­le zwischen ob­jekt­ori­en­tier­tem Code und re­la­tio­na­ler Datenbank. Eine Web-App lebt von den In­ter­ak­tio­nen der Nut­ze­rin­nen und Nutzer mit sich über der Zeit wan­deln­den Daten. Für ge­wöhn­lich ist die An­wen­dungs­schicht in einer ob­jekt­ori­en­tier­ten Pro­gram­mier­spra­che ge­schrie­ben, während die Spei­cher­schicht auf einer re­la­tio­na­len Datenbank fußt. Sowohl Laravel als auch Symfony bringen eine eigene ORM-Im­ple­men­tie­rung mit.

Das in Symfony zum Einsatz kommende ORM heißt „Doctrine“ und wird als ei­gen­stän­di­ges Project verwaltet. Doctrine setzt auf das „Data Mapper“-Muster und umfasst mehrere Kom­po­nen­ten; 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 ver­schie­de­ner Datenbank-Backends verbinden.

App-Scaf­fol­ding in Laravel und Symfony

Sowohl Laravel als auch Symfony haben eine eigene Kom­man­do­zei­len-Schnitt­stel­le (CLI) zur Pro­jekt­ver­wal­tung mit an Bord. Die CLI lässt sich zum Beispiel zum „App-Scaf­fol­ding“ einsetzen. Darunter versteht man den au­to­ma­ti­sier­ten Aufbau von Projekt-Struk­tu­ren, wie Model-View-Con­trol­ler-Kom­po­nen­ten oder Datenbank-Modellen.

Laravels CLI mit Namen „artisan“ und Symfonys „bin/console“-Befehl enthalten eine Vielzahl nütz­li­cher Kommandos. Lo­gi­scher­wei­se wird zunächst eine exis­tie­ren­de Laravel- bzw. Symfony-App benötigt, bevor auf die CLI zu­ge­grif­fen werden kann. Zur initialen In­stal­la­ti­on einer Laravel- oder Symfony-App kommt nor­ma­ler­wei­se Composer zum Einsatz.

Vor- und Nachteile von Laravel und Symfony zu­sam­men­ge­fasst

Bei Laravel und Symfony handelt es sich um aus­ge­reif­te Web-Frame­works. Dabei gilt Laravel als einfacher und besser für kleinere Projekte geeignet. Die flache Lernkurve und schnell erzielte Resultate haben zum Erfolg des po­pu­lärs­ten PHP-Frame­works bei­getra­gen.

Symfony ist berühmt für seine von­ein­an­der ent­kop­pel­ten Kom­po­nen­ten. Diese lassen sich zu­sam­men­ge­nom­men als Web-Framework einsetzen, oder in­di­vi­du­ell als Teil selbst­er­stell­ter Software. Während Laravel auf Ein­fach­heit setzt, strebt Symfony Fle­xi­bi­li­tät an. Damit eignet sich das Framework besser für komplexe Projekte mit spe­zi­el­len An­for­de­run­gen.

Wir prä­sen­tie­ren die Vor- und Nachteile im Vergleich Symfony vs. Laravel zu­sam­men­ge­fasst:

Kriterium Symfony Laravel
Funk­ti­ons­um­fang +++ ++
Aus­ge­reift­heit +++ +++
Ein­fach­heit + ++
Fle­xi­bi­li­tät +++ +
Be­dien­bar­keit + +++
Community ++ +++
Fazit

Wann sollte man nun welches Framework verwenden? Kurz gesagt ist Laravel die bessere Wahl für Ein­ste­ge­rin­nen und Ein­stei­ger sowie kleinere Projekte. Symfony ist modular aufgebaut und lässt sich flexibel den je­wei­li­gen Be­din­gun­gen anpassen. Es eignet sich damit besonders für komplexe An­wen­dun­gen.

Zum Hauptmenü