Das PHP-Framework von Laravel bietet ein Bundles-System, mit dem Entwickler nützliche Code-Pakete neu verteilen oder Anwendungen in mehrere "Bündel" kleinerer Anwendungen organisieren können.
In diesem Lernprogramm erfahren Sie alles über das Erstellen und Verteilen von Bundles von Grund auf.
Ein Laravel-Bundle hat Zugriff auf alle Funktionen, die das Framework seiner Hostanwendung bietet, einschließlich Routing, Migrationen, Tests, Ansichten und zahlreichen anderen nützlichen Funktionen.
Hier ist ein kleines Geheimnis zwischen uns: der
Anwendung
Ordner des Laravel-Quellpakets ist auch ein Bundle, auf das sich Laravel beziehtDEFAULT_BUNDLE
.
Bevor ich einen neuen Code schreibe, stelle ich mir gerne ein paar einfache Fragen, um festzustellen, ob er für ein Bundle geeignet ist. Lassen Sie mich diese Technik mit Ihnen teilen.
Wenn die Antwort auf diese Frage "Ja" lautet, würde ich zunächst sicherstellen, dass noch kein ähnliches Paket oder Paket erstellt wurde. Anders als zu Lernzwecken ist es sinnlos, das Rad neu zu erstellen. Wenn das andere Paket so hoch ist, dass es in Ihrem Projekt verwendet werden kann, verwenden Sie es stattdessen und sparen Sie sich Zeit.
Zweitens denke ich über den Code nach und entscheide, ob er für Benutzer anderer Frameworks nützlich sein kann oder nicht. Wenn der Code nicht mit dem Laravel-Framework zusammenhängt und nicht die Kernklassen von Laravel verwenden muss, würde ich stattdessen ein Composer-Paket erstellen. Composer-Pakete werden allgemein zum Standard für die Freigabe von Code, der nicht auf ein einzelnes Framework oder Projekt beschränkt ist.
Weitere Informationen zu Composer finden Sie unter den folgenden Links:
Wenn der Code für andere nützlich sein könnte und vom Laravel-Framework abhängig ist, haben Sie einen guten Grund, ein neues Bundle zu erstellen.
DRY ist der Name des Spiels.
Wenn der Code Funktionen enthält, die Sie häufig schreiben, ist es sinnvoll, ein Bundle zu erstellen. DRY (Wiederholen Sie sich nicht!) Ist der Name des Spiels.
Sie können beispielsweise eine einfache Website erstellen, die neben anderen Funktionen eine Blogkomponente enthält. Das Blog kann als separate Anwendung betrachtet werden, die in einem Paket enthalten ist, um Ihr Projekt viel besser zu organisieren.
Ein anderes Beispiel wäre ein Verwaltungsabschnitt oder ein "Back-End" für Ihre Website. Dieser Abschnitt kann leicht als separate Komponente von der Hauptanwendung betrachtet werden und kann stattdessen in einem oder mehreren Paketen organisiert werden.
Wenn dies der Fall ist, können Sie stattdessen eine "Bibliothek" schreiben. Eine Bibliothek ist eine einzelne Klasse, die wiederverwendbaren Code enthält. Sie kann leicht zu einem Laravel-Projekt hinzugefügt werden, indem Sie die Klasse in das Anwendung / Bibliotheken /
Verzeichnis, das standardmäßig automatisch geladen wird.
Lassen Sie uns ein einfaches Plug-in erstellen, das mit dem Gravatar-Service interagiert, um eine einfache Methode zum Generieren von Avataren unterschiedlicher Größe in unserer Hauptanwendung bereitzustellen. Wir werden auch die erforderliche Funktionalität hinzufügen, um eine E-Mail-Adresse und die Avatargröße einzugeben und eine Vorschau des zugehörigen Gravatars auf der Seite anzuzeigen.
Beginnen wir mit dem Erstellen eines neuen Verzeichnisses in der /Bündel
Verzeichnis unseres Projekts. Wir rufen das Verzeichnis und unser Bundle an ernsthaft
. Nicht Soße… ernsthaft.
Fügen wir dem Bundles-Array innen Gravvy hinzu application / bundles.php
damit wir es testen können, während wir weitergehen. Wir werden ein hinzufügen 'auto' => true
Option für das Array, so dass das Bundle automatisch gestartet wird und alle von uns erstellten Autoloader-Zuordnungen für Laravel verfügbar sind.
return array ('docs' => array ('handle' => 'docs')), 'gravvy' => array ('auto' => true));
Zunächst müssen Sie eine kleine Bibliothek erstellen, die den Avatar eines Benutzers mithilfe einer E-Mail-Adresse abruft. Erstellen Sie im Stammverzeichnis des Bundles eine neue Datei mit dem Namen gravvy.php
. Lassen Sie uns eine Klasse erstellen, genannt Gravvy
mit einer statischen Methode, machen()
, das Namensschema der eigenen Bibliotheken von Laravel zu replizieren.
Das machen()
Die Methode akzeptiert zwei Parameter: eine E-Mail-Adresse und eine Ganzzahl, um die Größe des abzurufenden Avatars darzustellen.
* / class Gravvy / ** * Erstellen Sie ein neues Bildelement aus einer E-Mail-Adresse. * @param string $ email Die E-Mail-Adresse. * @param integer $ size Die Avatargröße. * @return string Die Quelle für ein Bildelement. * / public static function make ($ email, $ size = 32) // konvertiere unsere E-Mail in einen MD5-Hash $ email = md5 ($ email); // das Bildelement zurückgebenJetzt weiß Laravel, wo er die Definition für unsere finden kann
Gravvy
Klasse und lädt die Quelle, wenn sie sie zum ersten Mal benötigt. Sehr effizient!Das
Pfad()
method ist eine Hilfsfunktion, die den absoluten Pfad zu nützlichen Ordnern zurückgibt, die von Laravel verwendet werden. In diesem Fall verwenden wir es, um den absoluten Pfad zum Bundles-Verzeichnis abzurufen.Nun, da wir über unsere funktionierende Gravvy-Klasse verfügen, könnten wir versuchen, sie aus einem Controller heraus zu verwenden, um zu sehen, ob wir die erwartete Ausgabe erhalten. Ich denke, es wäre angemessener, einen Unit-Test zu schreiben.
Genau wie bei der Hostanwendung sind Komponententests innerhalb des Pakets verfügbar. Lass uns einen erstellen
Tests
Ordner innerhalb des Bundles und fügen Sie eine neue Datei hinzugeneral.test.php
.assertEquals (Gravvy :: make ('[email protected]'), ''); / ** * Testen Sie, ob die Ausgabe eines Avatars erwartungsgemäß angezeigt wird, wenn Sie * eine benutzerdefinierte Avatargröße angeben. * * @return void * / public function testAvatarImageIsGeneratedWithSize () // Starten des Paket-Pakets Bundle :: Start ('Gravvy'); // Überprüfen Sie, ob die Ausgabe mit den erwarteten $ this-> assertEquals-Werten übereinstimmt (Gravvy :: make ('[email protected]', 64), '');Oben haben wir zwei PHPUnit-Tests geschrieben: einen Test zum Testen der Ausgabe eines Avatars mithilfe einer E-Mail und einen weiteren, der auch die Größe eines Avatars in Pixel angibt. Sie werden feststellen, dass wir anrufen
Bundle :: start ('gravvy')
das Bündel manuell starten. Dies liegt daran, dass Laravel derzeit keine Bundles automatisch über die Befehlszeilenschnittstelle lädt.Als Kernteammitglied möchte ich darauf hinweisen, dass wir dies in einer zukünftigen Version beheben wollen!
Verwenden Sie Artisan, um unsere PHPUnit-Tests auszuführen, indem Sie die Zeichenfolge eingeben
Prüfung
Befehl und mit dem Bundle-Namen,ernsthaft
, als Parameter.PHP Handwerker Test gravvyGroßartig! Unsere Tests sind beim ersten Versuch erfolgreich gelaufen, und unser Ego ist gewachsen - nur ein bisschen!
Jetzt, da unsere Gravvy-Klasse getestet wurde, können die Leute sie in ihren eigenen Anwendungen verwenden! Lassen Sie uns noch einen Schritt weiter gehen und ein paar einfache Seiten erstellen, um Gravatare zu erstellen und in der Vorschau anzuzeigen. In diesem Beispiel können Sie erfahren, wie das Routing-System Bundles behandelt.
Beginnen wir mit dem Erstellen eines neuen 'Vorschau'-Controllers für unser Bundle. Wir müssen eine erstellen
Steuerungen
Verzeichnis innerhalb des Bundles, und in diesem fügen wir eine neue Datei hinzu:preview.php
.Dem Controller-Namen muss der Bundle-Name vorangestellt und mit angehängt werden
_Regler
- wie bei normalen Controllern.Wir könnten einige Routen erstellen, um unsere Controller-Aktionen sinnvollen URIs zuzuordnen, aber wäre es nicht besser, wenn wir den Benutzer unseres Bundles entscheiden lassen könnten, welcher Basis-URI verwendet werden soll? Es würde? Lass uns das dann machen!
Durch Hinzufügen von a
'Handles' => 'Gravvy'
Wenn Sie ein Schlüssel-Wert-Paar für das Bundles-Konfigurationsarray verwenden, können Sie es dem Benutzer ermöglichen, es zu ändern, ohne den Code des Bundles selbst zu ändern. Hier ist die resultierende Konfiguration inapplication / bundles.php
.return array ('docs' => array ('handle' => 'docs'), 'gravvy' => array ('auto' => true, 'handle' => 'gravvy'));Jetzt können wir die verwenden
(:bündeln)
Platzhalter in unseren Routen, der durch den Wert der ersetzt wirdGriffe
Möglichkeit. Lass uns einen erstellenrouten.php
Datei in der Wurzel unserer Bundles und fügen Sie einige Routen hinzu.Route :: get ('(: bundle) / form', 'gravvy :: preview @ form'); Route :: post ('(: bundle) / preview', 'gravvy :: preview @ preview');Wir haben die Route
Erhalten gravvy / form
Welches ist der zugeordnetbilden
Aktion derVorschau
Controller undPOST gravvy / Vorschau
Welches ist der zugeordnetVorschau
Aktion derVorschau
Regler.Lassen Sie uns die zugehörigen Ansichten für unsere Controller-Aktionen erstellen. Sie können sie so komplex und hübsch machen, wie Sie möchten, aber ich werde sie einfach halten. Erstellen Sie zuerst eine
Ansichten
Ordner innerhalb des Bundles, genau wie beim Anwendungsverzeichnis.
Nun haben wir ein Formular, das ein E-Mail- und ein Größenfeld an die E-Mail-Adresse sendet Vorschau @ Vorschau
Controller / Action-Paar, erstellen wir eine Vorschauseite für den generierten Avatar; Wir verwenden ein Attribut mit dem Namen $ element
, seine Quelle halten.
$ element
HTML :: link \ _to \ _action ('gravvy :: preview @ form', '< Go Back!')
Jetzt müssen wir das ändern Vorschau
Aktion, um die vom Formular übermittelten Daten zu verwenden.
/ ** * Zeigt den resultierenden Avatar. * / public function action_preview () // Daten aus unserem Formular abrufen $ email = Eingabe :: get ('email'); $ size = Eingabe :: get ('size'); // generiere den Avatar $ avatar = Gravvy :: make ($ email, $ size); // lade die Vorschau-Ansicht zurück View :: make ('gravvy :: preview') -> with ('element', $ avatar);
Wir holen die POST-Daten ab und erstellen daraus unseren Avatar. Wir müssen auch eine hinzufügen mit()
Methode zum Ansicht :: make ()
chain, damit das Element in der Ansicht verwendet werden kann.
Endlich können wir unser Avatar-Vorschausystem testen! Schauen Sie sich das an / gravvy / form
URI und probieren Sie es aus! Alles funktioniert wie erwartet.
Dies ist möglicherweise nicht der beste Weg, um Ihr Bundle zu organisieren, hebt jedoch einige nützliche Dinge hervor. Viel Spaß beim Erstellen Ihrer eigenen Bundles, und stellen Sie sicher, dass Sie sie auf der Bundles-Website veröffentlichen.
Wenn sich Ihr Bundle in einem funktionsfähigen Zustand befindet, können Sie es in Betracht ziehen, es im Laravel Bundles-Verzeichnis aufzulisten. Lassen Sie uns durchlaufen, wie Sie ein neues Bundle einreichen.
Zunächst benötigen Sie ein GitHub-Konto und die Versionierung Ihres Bundles in einem öffentlichen Repository. GitHub bietet kostenlose Konten mit einer unbegrenzten Anzahl öffentlicher Repositories an. Das Anmeldeformular finden Sie hier.
Wenn Sie mit Git noch nicht mit der Versionskontrolle vertraut sind, schlage ich vor, die großartige Reihe von Git-Artikeln hier auf Nettuts zu lesen+.
Wenn Sie Ihr Konto und Ihren Code in der richtigen Reihenfolge haben, stellen Sie sicher, dass sich die neueste Version Ihres Bundles im Zweig 'master' befindet und dass der Stamm Ihres Bundles (wo das start.php
wäre das Wurzelverzeichnis des Repositorys und nicht ein Unterverzeichnis.
Besuchen Sie als nächstes die Laravel Bundles Directory-Website und melden Sie sich mit Ihren GitHub-Anmeldeinformationen an.
Klicken Sie nun auf die Schaltfläche "Ein Paket senden", wählen Sie Ihr Paket-Repository aus dem Dropdown-Menü aus und klicken Sie auf die Schaltfläche "Weiter".
Das Anmeldeformular ist recht unkompliziert, aber hier sind einige "Gotchas", die Sie möglicherweise nicht entdecken.
Name
Name ist ein Schlüsselwort in Kleinbuchstaben, das zur Installation Ihrer Anwendung verwendet wird. Es muss ein kurzes, aber genaues Wort sein, um Ihr Bundle zu beschreiben.
Zusammenfassende Beschreibung
Diese Felder können Inhalt des Abschriftenformats enthalten. Sie können also den Inhalt von Ihrem GitHub kopieren README.md
Datei.
Abhängigkeiten / Tags
Verwenden Sie die Komma-Taste auf Ihrer Tastatur, um Tags und Abhängigkeiten voneinander zu trennen. Das Feld "Abhängigkeiten" sollte das kurze Installationsschlüsselwort für das Bundle enthalten, das als Abhängigkeit für das von Ihnen übermittelte Bundle vorhanden ist.
Aktiv
Das Aktiv
Das Feld legt einfach fest, ob das Bundle anderen Benutzern angezeigt wird oder nicht. Sie können weiterhin inaktive Bundles zu Testzwecken nach ihrem Installationsschlüsselwort installieren. Setzen Sie dieses Feld nur dann auf "Ja", wenn Sie froh sind, dass andere Personen Ihr Bundle verwenden.
Nachdem Sie auf die Schaltfläche "Speichern" geklickt haben, wurde Ihr Bundle übermittelt, und wenn es als "Aktiv" markiert ist, wird es in den Bundle-Listen angezeigt. Sie können Ihren Bundle-Eintrag jederzeit zu einem späteren Zeitpunkt bearbeiten.
Bundles, die für die Laravel-Community freigegeben wurden, sind im Bundles-Verzeichnis unter http://bundles.laravel.com aufgeführt.
Sie können Bundles nach Kategorien durchsuchen oder die Suchfunktion verwenden, um das gewünschte Bundle zu finden. Wenn Sie ein Bundle gefunden haben, das Ihren Anforderungen entspricht, suchen Sie auf der Registerkarte "Installation" des Profils des Bundles nach dem Installationsschlüsselwort.
Wenn Sie das Installationsschlüsselwort für ein Bundle erworben haben, können Sie es von der Basis Ihres Projekts aus mithilfe der Befehlszeilenschnittstelle 'Artisan' installieren Bundle: installieren
Befehl. Zum Beispiel…
PHP Handwerker-Bundle: Installieren Sie Bob
Artisan konsultiert die Bundles-API, um den Pfad zum GitHub-Repository der Bundles und die Repositorys aller Abhängigkeiten abzurufen. Anschließend werden Quellpakete direkt von GitHub heruntergeladen und in das Verzeichnis extrahiert /Bündel
Verzeichnis für Sie.
Sie müssen den Paketnamen manuell zu dem Array in hinzufügen application / bundles.php
damit das Bundle aktiviert wird.
return array ('docs' => array ('handle' => 'docs'), 'bob');
In einigen Situationen müssen Sie möglicherweise zusätzliche Informationen hinzufügen Array
Eintrag, um das automatische Starten zu erleichtern oder bestimmte Routen zum Bundle zu leiten. Wenn dies der Fall ist, hat der Autor diese zusätzlichen Informationen in der Beschreibung der Bundles angegeben.
Vielen Dank für das Lesen und viel Spaß beim Erstellen Ihrer eigenen Pakete mit Laravel! Wenn Sie mehr über Laravel erfahren möchten, holen Sie mein Buch unbedingt ab!