Sven Schannak 1. Juni 2012

Laravel PHP-Framework: Weg mit dem Spaghetti-Code!

Laravel

PHP-Frameworks gibt es wie Bäume im Wald und bei dem dichten Laubwerk kann man schnell die Übersicht verlieren. Laravel, das seit April 2011 entwickelt wird, will sein Alleinstellungsmerkmal in sauberem Code und tief integrierter Active-Record-Unterstützung finden.

Laravel

Laravel

Laravels Grundphilosophie

Sauberer Code? Das haben wir in der PHP-Umgebung schon öfter gehört. Die Frage, die dahinter steht: Ist das mit PHP überhaupt machbar?

Immerhin hat sich der Entwickler von Lavarel vorgenommen, das Framework in einem Stil zu entwerfen, der dem Prinzip für spätere Nutzer

„We are using Laravel. If it’s ugly, it’s not in the framework“ (Wir benutzen Laravel. Ist es hässlich, liegt es nicht an unserem Framework.)

entspricht.  Umgesetzt wurde das unter anderem mit der Integration eines ORM (Object Relational Mapping). Dieses ist dafür da, schwierige und unansehnliche SQL-Konstrukte in einfache Programmzeilen zu verwandeln, was eine vereinfachte Datenmigration und -verwaltung ermöglicht.

MVC  (Model View Controller)  ist mittlerweile zu einem unverzichtbaren Pattern geworden und kommt auch in Laravel zum Einsatz. Hierbei wird das klassische MVC-Prinzip genutzt. In den Models stehen alle Daten zur Verknüpfung mit der Datenbank, wobei der auf Active-Records basierende „Fluent Query Builder“ zum Erstellen einfacher und verketter SQL-Anfragen in PHP-Code genutzt werden kann. Auch reines SQL darf verwendet werden. Controller sind erst ziemlich spät zu Laravel dazu gekommen, augenscheinlich auch nur aus Gründen der Anwendbarkeit für Nutzer, die von anderen Frameworks auf Laravel umsteigen wollen. Laravel selbst setzt für kleinere Projekte eher darauf, die Logik im Routing-File zu integrieren. Da sind Controller durchaus die ansprechendere Lösung.

Das bereits angesprochene Routing ist für die „Weiterleitung“ des Nutzers beim Aufrufen von Projekt-URLs gedacht. Es gibt zum Beispiel eine Art Event-Listener, der unter anderem auf 404-Fehler reagiert. Wichtiger sind aber das Leiten der Nutzeranfragen zur Logik und die daraus resultierende Auswertung. Die Auswertung erfolgt in letzter Instanz über die Views. Diese dienen dazu, eine wohlgeformte Antwort z.B. in HTML zu erstellen und dem Nutzer mit Hilfe der Daten aus Controller und Models bereit zu stellen.

Bundles in Laravel

Erweiterbarkeit ist natürlich eine grundlegende Vorraussetzung moderner Frameworks. Diese Erweiterungen werden in Laravel über Bundles eingebunden. Bundles können von einfachen Plugins bis zur komplizierten fertigen Anwendung alles sein. Im Prinzip funktionieren diese eigenständig und benötigen nur die grundlegenden Einstellungen aus der Hauptanwendung, z.B. für die Datenbank.

Ansonsten hat Laravel eigentlich alles an Bord, was für eine professionelle Entwicklung nötig ist. Formulare können einfach, aber sicher validiert werden. Dank Localization können Anwendungen in mehreren Sprachen angeboten werden. Zudem verfügt es über eine Encryption-Klasse, die eine 2-Wege-Encryption über AES-256  und Decryption via Mcrypt PHP bietet.

Unit-Tests sind durch die Integration der PHPUnit Testing Library ebenfalls möglich.

Sauberer Code in Laravel

Doch, wie war das noch mit dem sauberen Code? Schafft Laravel tatsächlich das Wunderwerk? Laravel ist zumindest sehr dicht dran, kann aber auf Grund von Problemen durch die Sprache PHP nicht vollends überzeugen. Features wie Eloquent ORM bringen den Nutzer aber automatisch dazu, übersichtlicheren Code zu schreiben. Schade finde ich persönlich nur, dass man den Entwicklern offen lässt, ob sie ihre Logik im Routing-File schreiben wollen oder als Controller. Ich hoffe aber, dass dies kaum zu Problemen führen wird. Vielleicht wäre ein Ansatz wie das Prinzip der Generic-Views z.B. aus Django ein konsensfähiger Kompromiss.

Im Endeffekt ist natürlich jeder selber für sauberen Code verantwortlich. Laravel bietet als Framework einen guten Ausgangspunkt, ist aber mit gerade mal 13 Monaten noch jung. Wichtig ist auch, wie sich die Community um Laravel, vor allem in Bezug auf Bundles entwickeln wird. Dort gibt es zwar schon gute Ansätze, so etwa ein Bundle für Doctrine. Es bleibt jedoch noch sehr viel Spielraum.

Fazit: Laravel ist ein Framework, das man als PHP-Entwickler testen und auf jeden Fall weiter beobachten sollte, dank eines guten Ansatzes und einer starken Dokumentation.

(dpe)

Sven Schannak

ist ein leidenschaftlicher Web-Entrepreneur, freiberuflicher Web-Entwickler und stolzer Coding-Monkey.
Dr. Webs exklusiver Newsletter
Hinweise zum Datenschutz, also dem Einsatz von Double-Opt-In, der Protokollierung der Anmeldung, der Erfolgsmessung, dem Einsatz von MailChimp als Versanddienstleister und deinen Widerrufsrechten findest du in unseren Datenschutzhinweisen.

8 Kommentare

  1. Gut, das hatte ich eigentlich auch nicht so verstanden, kam vielleicht falsch rüber :) Aber wie gesagt, schade ist der Ansatz auf keinen Fall.
    Ich habe mich ehrlich gesagt noch nie mit Django beschäftigt und konnte auf die Kürze nicht herausfinden was es damit auf sich hat :/
    Artisan und Blade sind großartige Dinge, eine Erwähung wäre tatsächlich nicht schlecht!
    Und zum Vergleich würden sich vielleicht Litium und FuelPHP anbieten, ebenfalls recht neue Frameworks. Fuel habe ich selbst kurz ausprobiert, durch den Wechsel von Cartalyst (cartalyst.com) zu Laravel bin ich dann aber nach etwa 3 Wochen auf Laravel gekommen. Lithium war mir irgendwie zu schwer zugänglich, auch wenn man sich im Code dank Erfahrungen in CodeIgniter gut zurechtfindet.
    — Was in Laravel, wohl auch in Django, der Fall ist, ist dass alle URLs expizit gerouted werden müssen. Man kann auch komplette Controller routen, wie gesagt, das Routing-System ist mächtig :D

  2. Ein netter Beitrag der allerdings mit einem direkten Vergleich zu ähnlichen PHP-Frameworks und ein paar Beispielen etc. auch etwas ausführlicher hätte ausfallen können. Mir fehlt hier zum Beispiel auch die Erwähnung von Artisan als CMD-Tool sowie der Blade Template Engine welche ebenfalls nicht unerwähnt bleiben sollte! Mittels Artisan lassen sich Aufgaben wie Cronjobs oder auch ganze Unit testings bequem von außen anstoßen. Die Blade Template Engine bietet hingegen die Möglichkeit den Code sauber und strukturiert zu halten ohne die Ausführungszeit im großen Maße zu beeinträchtigen. Um sogenannte Blade Templatedateien zu definieren reicht es aus diese mit prefix „.blade.php“ zu versehen. So würde dann z.B: aus home.php > home.blade.php werden und damit optional durch den Template Interpreter laufen.

    Vor ein paar Monaten wagte auch ich endlich den Sprung von yii zum Laravel PHP-Framework und bin bisher immer noch mehr als nur begeistert. Die Umstellung gestaltete sich nicht sehr schwierig da das Laravel PHP-Framework doch recht simpel und ähnlich aufgebaut ist. Hier ist allerdings der Routingmechanismus um einiges umfangreicher ausgearbeitet als bei yii was sich schnell als äußerst nützlich erwies. Auch gibt es hier eine bequeme Möglichkeit meine bisher schon genutzten Doctrine2 Modelle zu nutzen was mir sehr gelegen kam :)

    cheers

    • Hallo Rob,

      ich wollte Laravel auch anfangs mit anderen Frameworks vergleichen. Da hätten sich verschiedene Frameworks durchaus angeboten, das lasse ich mir aber für weitere Beiträge offen.

      Ich wollte auch versuchen Laravel möglichst fair zu betrachten und mir ist auch bewusst, dass es tolle Möglichkeiten zur Erweiterung gibt und noch weitere Features die man nutzen kann, deswegen werde ich mich auch mit Laravel weiter und intensiver beschäftigen.

      Besonders die Blade Template Engine finde ich interessant. Es werden bestimmt noch weitere, dann aber ausführlichere Artikel zum Thema folgen.

      Bis dahin freue ich mich über eure Anregungen !

      • Hey Sven,

        na dann freue ich mich einfach mal auf die zukünftigen Beiträge in Sachen Laravel von dir :)

        cheers

  3. Beispiele gibt es zum Beispiel auf getlaravel.com
    Ich selbst nutze seit einiger Zeit Laravel und bin damit mehr als zufrieden.
    Dass man es dem Entwickler überlässt selbst zu entscheiden, wo er seine Logik hinpackt ist alles andere als schade – viel mehr haben wir es hier mit einem Kern-Feature von Laravel zu tun. Das Routing-System von Laravel ist extrem stark und wenn man, wie ich zum Beispiel, von anderen Frameworks wie CodeIgniter oder Fuel kommt, benötigt man tatsächlich einen Augenblick zum Umdenken. Allerdings führt dieser Ansatz keinesfalls zu Problemen, viel mehr kann man entscheiden, was einem besser gefällt bzw. mehr Sinn macht. Als Ergebnis hat man letztendlich wieder sauber(er)en Code.
    Obgleich ich von Laravel innerhalb eines Moments begeistert war, ist es so, dass man sich zunächst mit dem System beschäftigen muss, um wirklich in den Genuss zu kommen. Und Laravel hat einiges zu bieten! Ich finde also ehrlich gesagt Artikel schöner, die auf Erfahrungen basieren und wo man sich tatsächlich mit dem System tiefer befasst hat. Schön ist es trotzdem, dass es endlich einen deutschen Artikel über das Framework gibt :)

    • Hallo FvG,

      ich wollte mit dem Beitrag auch nicht Laravel kritisieren. Ich hab das ganze als mögliches Problem bzgl. Inkonsistenzen aufgefasst. Das Ganze wird natürlich einen tieferen Sinn haben.

      Im Endeffekt sollte der Artikel den Leser auf Laravel aufmerksam machen. Ich fand es in dem Moment interessant, als ich ORM gelesen habe, da ich in Django entwickle.

      Vielleicht kannst du mir ja aus deiner Erfahrung sagen, ob es in Laravel eine ähnliche Möglichkeit wie in Django mit den Generic-Views gibt ?

    • Hallo FvG,

      ich wollte mit dem Beitrag auch nicht Laravel kritisieren wegen seines Routing-Ansatzes. Ich hab das ganze als mögliches Problem bzgl. Inkonsistenzen aufgefasst. Das Ganze wird natürlich einen tieferen Sinn haben.

      Im Endeffekt sollte der Artikel den Leser auf Laravel aufmerksam machen. Ich fand es in dem Moment interessant, als ich ORM gelesen habe, da ich in Django entwickle.

      Vielleicht kannst du mir ja aus deiner Erfahrung sagen, ob es in Laravel eine ähnliche Möglichkeit wie in Django mit den Generic-Views gibt ?

  4. Danke für den Bericht. Ich hätte mir jedoch ein paar Code-Beispiele gewünscht.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Kennst du schon unseren Newsletter?

Hinweise zum Datenschutz, also dem Einsatz von Double-Opt-In, der Protokollierung der Anmeldung, der Erfolgsmessung, dem Einsatz von MailChimp als Versanddienstleister und deinen Widerrufsrechten findest du in unseren Datenschutzhinweisen.

Cookies

Weitere Informationen zu den Auswahlmöglichkeiten findest du hier. Dazu musst du zunächst keine Auswahl treffen!

Um Dr. Web zu besuchen, musst du eine Auswahl treffen.

Deine Auswahl wurde gespeichert!

Informationen zu den Auswahlmöglichkeiten

Was du erlaubst!

Um fortfahren zu können, musst du eine Auswahl treffen. Nachfolgend erhältst du eine Erläuterung der verschiedenen Optionen und ihrer Bedeutung.

  • Ich stimme zu:
    Du erlaubst uns das Setzen aller Cookies, die wir in unseren Datenschutzhinweisen genannt haben. Dazu gehören Tracking- und Statistik-Cookies. Aus dem Tracking per Google Analytics bieten wir auf der Seite Datenschutz ein Opt-Out, also die Möglichkeit der Abmeldung, an.
  • Ich stimme nicht zu:
    Wir verzichten bei dieser Option auf den Einsatz von Google Analytics. Die für den Betrieb von Dr. Web notwendigen Cookies werden aber dennoch gesetzt. Einzelheiten entnimmst du bitte den Datenschutzhinweisen

Du kannst deine Cookie-Einstellungen jederzeit hier ändern: Datenschutz. Impressum

Zurück