Was ist neu in Laravel 5?

Die PHP-Community wurde kürzlich mit einer neuen Version eines der beliebtesten Frameworks, Laravel, gesegnet. Version 5.0.1 ist eine Hauptversion, daher sind nicht nur einige großartige neue Funktionen verfügbar, sondern auch die architektonischen Grundlagen des Frameworks wurden in gewissem Maße geändert. Ich werde mich also ohne weiteres mit dem Rahmen beschäftigen und Ihnen all die guten Dinge zeigen, die die neueste Version zu bieten hat.

1. Verzeichnisstruktur

Die Ordnerstruktur eines Laravel-Projekts wurde grundlegend überarbeitet. Laravel 5 implementiert den Autoloading-Standard PSR-4, was bedeutet, dass alle Ihre Klassen vollständig im Namensraum liegen. Der Standardnamespace für Ihre Webanwendung lautet App, die Sie mit dem ändern können PHP Handwerker App: Name Befehl. 

Ihre Modelle fallen unter den Standard-App-Namespace und befinden sich im App-Ordner. Die Assets, Ansichten und Sprachdateien Ihrer Anwendung befinden sich im Ressourcenordner. Die Herstellerverzeichnisse, public und bootstrap-Verzeichnisse behalten ihren Platz wie in den älteren Versionen des Frameworks, während die Verzeichnisse config, storage, database und tests in das Stammverzeichnis des Projekts verschoben wurden. 

Wenn Sie einen Blick in den App-Ordner werfen, werden Sie viele Klassen bemerken, aber machen Sie sich vorerst keine Sorgen - wir werden im Laufe dieses Artikels darauf eingehen. 

Die Umgebungserkennung wurde erheblich verbessert. Anstelle aller komplexen verschachtelten Konfigurationsverzeichnisse haben Sie eine .env Datei im Stammverzeichnis Ihres Projekts, um sich um die Anwendungsumgebung und alle Umgebungsvariablen zu kümmern. Auch die PHP Handwerker basteln Der Befehl verwendet jetzt das Psysh-Paket anstelle von Boris.

2. Injektion der Methode

Die Methodeninjektion wurde stark vereinfacht. Bis zur Version 4.2 mussten Sie den Inversion of Control-Container (IoC-Container) anfordern, um eine Klasseninstanz bereitzustellen, oder im Konstruktor Ihres Controllers erstellen, um ihn im Klassenbereich zugänglich zu machen. Jetzt können Sie die Typinstanz-Klasseninstanz in der Signatur der Controller-Methode deklarieren, und der IoC-Container kümmert sich darum, auch wenn die Signatur Ihrer Controller-Funktion mehrere Parameter enthält.

3. Verträge

Verträge sind eigentlich verkleidete Schnittstellenklassen. Schnittstellen sind eine bewährte Methode, um Klassenabhängigkeiten zu beseitigen und lose gekoppelte Softwarekomponenten zu entwickeln. Sie helfen Ihnen im Allgemeinen, der Regel "abhängig von Abstraktionen, nicht Konkretionen" zu folgen. 

Laravel kauft dieselbe Philosophie. Die meisten der wichtigsten Kernkomponenten nutzen diese Verträge, um das Framework locker miteinander zu verbinden. Sie können sie auch in Ihrer Paketentwicklung verwenden. 

Wenn für Ihr Paket beispielsweise eine Zwischenspeicherung erforderlich ist, können Sie anstelle der Verwendung einer konkreten Cache-Klasse die implementieren Illuminate \ Contracts \ Cache Sie können die Cache-Implementierung ein- und ausstecken, ohne den Paketcode zu ändern. 

Sie werden möglicherweise gefragt, wie Laravel die Implementierung für einen bestimmten Vertrag herausfindet. All diese Magie geschieht im Inneren Illuminate \ Foundation \ Application.php Datei.

4. Routen-Caching

Artisan hat eine neue Funktion zum Zwischenspeichern von Routen. Das Zwischenspeichern von Routen beschleunigt die Routenregistrierung Ihrer Anwendung enorm, mit deutlich sichtbaren Leistungsvorteilen. Wenn Ihre Anwendung jedoch nur wenige Routen umfasst, werden Sie möglicherweise nicht die Auswirkungen der Zwischenspeicherung von Routen sehen, was bedeutet, dass sie für Fälle geeignet sind, in denen Ihre Anwendung eine große Anzahl von Routen hat. 

Die Befehle PHP Handwerker Route: Cache und php handwerker weg: klar Routen-Caching ein- bzw. ausschalten. Sobald die Zwischenspeicherung von Routen aktiviert ist, werden die von Ihnen an den Anwendungsrouten vorgenommenen Änderungen nicht wirksam. Das Zwischenspeichern von Routen würde im Allgemeinen als Teil Ihres Bereitstellungsprozesses implementiert.

5. Route Middleware

Mit Middleware können Sie Ihren HTTP-Routen zusätzliche Schichten hinzufügen. Wenn Sie möchten, dass Code vor jeder Route oder vor bestimmten Routen in Ihrer Anwendung ausgeführt wird, ist ein solcher Code für eine Middleware-Klasse geeignet. 

Angenommen, Sie möchten einen bestimmten Bereich von IPs aus Ihrer Anwendung sperren, um Ihre Anwendung in dieser Region nicht verfügbar zu machen. In diesem Fall müssen Sie vor jeder Anfrage die Client-IP-Adresse überprüfen und deren Eingabe in Ihre Anwendung zulassen / nicht zulassen. Dies wird bei Ihren Controller-Aktionen viel zu tun sein, daher verwenden Sie stattdessen Middleware. Generieren Sie eine Middleware-Klasse unter app / http / Middleware / RegionMiddleware.php durch die Nutzung PHP Handwerker machen: Middleware "RegionMiddleware".

Sie können Ihre Middleware dann im registrieren app / http / kernel.php Datei durch Anhängen an die $ Middleware Array. Sie können Middleware auch an bestimmte Routen anhängen, indem Sie sie dem hinzufügen $ routeMiddleware Array und dann in den Routenoptionen übergeben.

6. Authentifizierung

Die Authentifizierung ist in fast allen von Ihnen entwickelten Webanwendungen enthalten, und es wird viel Zeit darauf verwendet, die Authentifizierungsvorlage zu schreiben. Dies ist bei Laravel 5 nicht mehr der Fall. Die Datenbankmigrationen, Modelle, Controller und Ansichten müssen nur konfiguriert werden, damit alles funktioniert. Laravel 5 verfügt über einen Registrierungsdienst, der ein entscheidender Bestandteil dieses sofort einsatzbereiten Authentifizierungssystems ist.

7. Veranstaltungen

Vorbei sind die alten Zeiten, als Sie Ihre Anwendungsereignisse als Zeichenfolgen deklarierten, da das Ereignisobjekt jetzt verfügbar ist. Sie können Ereignisobjekte mit erstellen PHP Handwerker machen: Veranstaltung und Ereignisbehandlungsobjekte mit PHP Handwerker: Ereignis . Alle Ihre Event- und Handler-Klassen gehen in die App / Veranstaltungen und App / Handler / Ereignisse Ordner. 

Sobald Sie Ihre Ereignisse erstellt haben, können Sie sie abfeuern Ereignis :: Feuer (neues Ereignis (Params)). Um Listener an Ihre Ereignisse anzuhängen, müssen Sie das bearbeiten $ hören Array in der app / Providers / EventServiceProvider.php Datei.

8. Befehle

Mit Laravel 5 können Sie Ihre komplexe Geschäftslogik in einfache Befehlsobjekte einkapseln. 

Angenommen, Sie haben einen Online-Shop, in dem sich Benutzer registrieren und elektronische Artikel kaufen. Der Registrierungsvorgang kann die Überprüfung der E-Mail-Adresse und der Kreditkarte des Benutzers beinhalten. 

Es kann verlockend sein, den gesamten Code in einer Controller-Aktion zu sichern, aber es ist nicht ratsam, Code zu haben, der nur unter dem HTTP-Anforderungskontext funktioniert, aufgrund von HTTP-Anforderungen schwer zu testen ist und die Controller-Aktionen aufgebläht hat. 

Die Verwendung von Befehlen bietet Ihnen mehrere Vorteile. Erstens ist Ihr in sich geschlossener Code modular und ein Kinderspiel für den Komponententest. Da Laravel es Ihnen ermöglicht, Befehle in die Warteschlange zu stellen, kann Ihre Geschäftslogik asynchron im Hintergrund ausgeführt werden, was mit Controller-Aktionen nicht möglich ist.

9. Warteschlangen- und Aufgabenplanung

Eine einsatzbereite Warteschlange ist standardmäßig im Framework enthalten, sodass Sie keine Pakete von Drittanbietern verwenden müssen. Alles, was Sie tun müssen, ist die Warteschlange einzurichten und Sie sollten gut damit umgehen können. Alle Ihre in der Warteschlange befindlichen Jobs werden in der Datenbank gespeichert App / Befehle Mappe. Nachdem Sie Ihre warteschlangenfähigen Befehle erstellt haben, können Sie sie einfach mit in die Warteschlange verschieben Queue :: push (neuer Befehl ($ params))

Die Aufgabenplanung wurde ebenfalls erheblich verbessert. Zuvor mussten Sie für jeden Konsolenbefehl einen Cron einrichten, jedoch nicht mehr. Sie benötigen nur einen einzigen Cron-Eintrag und können Ihre Aufgaben in der Anwendung mit viel Syntaxzucker einplanen.

10. Mehrere Dateisysteme

Laravel 5 bietet native Unterstützung für mehrere Dateisysteme, die das Drittanbieter-Paket Flysystem verwenden. Ihre Anwendung kann lokalen oder Cloud-Speicher durch einfache Konfiguration verwenden. Sie müssen nur mit der Dateisystemfassade arbeiten, und die zugrunde liegenden Speicheroperationen werden automatisch erledigt. Sie können Ihre Speicheroptionen in konfigurieren config / filesystems.php Datei. Falls Sie Zugriff auf alle verfügbaren Speicheroptionen in Ihrem Projekt benötigen, können Sie die Dateisystemfassade umgehen und direkt mit der Festplattenfassade arbeiten.

11. Objekt anfordern

Das Anforderungsobjekt hilft Ihnen, Authentifizierungs- / Autorisierungs- und Datenvalidierungslogik in Ihre Anforderungen einzufügen. Nachdem Sie Ihre Geschäftslogik im Anforderungsobjekt implementiert haben, müssen Sie, wie bei der Methodeninjektion, einen Hinweis in die Aktion eines Controllers eingeben. 

Lassen Sie uns dies anhand eines Codebeispiels entschlüsseln. Ausführen PHP Handwerker machen: Anfrage TutsPlusRequest eine Anforderungsklasse an generieren app / Http / Requests / TutsPlusRequest.php. Wenn Sie sich den Inhalt dieser Datei ansehen, werden Sie feststellen, dass der Kunsthandwerker eine Regelmethode und eine Autorisierungsmethode erstellt hat. Sie werden einige Validierungsregeln in Ihre Regelmethode einfügen.

 'required | email', 'password' => 'required | min: 8'];  // in Ihrer Controller-Aktion öffentliche Funktion postLogin (\ App \ Http \ Requests \ TutsPlusRequest $ request) // Code wird hier nicht ausgelöst, // wenn die Validierungsregeln // in der Anforderung fehlschlagen?>

Sie möchten, dass die E-Mail eine gültige E-Mail ist und das Kennwort aus mindestens acht Zeichen besteht. Beide Felder sind Pflichtfelder. Wenn eine dieser Validierungsregeln fehlschlägt, wird Ihre Controller-Aktion nicht ausgeführt und der Benutzer wird auf die Formularseite umgeleitet.

12. Elixier

Elixir ist eine GulpJS-API für Laravel, mit deren Hilfe Sie Schluckaufgaben für Ihre Anwendungen definieren können. Das Eintauchen in GulpJS geht über den Rahmen dieses Artikels hinaus, Sie können jedoch die offizielle Website und Elixir für weitere Informationen besuchen. 

Ein typischer Anwendungsfall für GulpJS ist die Minimierung / Verkettung Ihrer CSS / JS-Dateien. Ihre Schluckpakete befinden sich im package.json Datei im Stammverzeichnis Ihres Projekts, während die Aufgaben, die ausgeführt werden müssen, in angegeben werden gulpfile.js Datei. Für diejenigen von Ihnen, die den GulpJS-Workflow bereits kennen, ist dies sinnvoller, da Elixir Ihnen nur bei der Integration von GulpJS in Ihre Laravel-Apps hilft.

13. Laravel Socialite

Socialite ist ein First-Party-Paket, das die Integration der Authentifizierung durch Dritte in Ihre Webanwendungen zu einem Kinderspiel macht. Da es nicht standardmäßig enthalten ist, müssen Sie es mit Composer ziehen. Anschließend müssen Sie die Anbieter konfigurieren, die Sie in Ihrer Anwendung verwenden möchten. Derzeit unterstützt Socialite Twitter, GitHub, Google und Facebook.

Vorhänge!

Ich hoffe, es hat Ihnen Spaß gemacht, sich mit den Besonderheiten von Laravel 5 zu beschäftigen. Aus architektonischer Sicht glaube ich, dass der Rahmen große Fortschritte gemacht hat. Dies wird einen großen Beitrag dazu leisten, den Code für Ihre Webanwendungen zu organisieren und Sie von dem Alptraum der Wartung zu befreien.

.