In diesem Artikel untersuchen wir die Paketverwaltungsfunktion im Laravel-Framework. Im Verlauf des Artikels gehen wir ein reales Beispiel vor, um den Zweck des Artikels zu veranschaulichen.
Die Paketverwaltung in Laravel ist eine wichtige Funktion, mit der Sie eine Funktion bündeln können, um sie leicht verteilen zu können. Außerdem können Sie Ihr Paket immer in Repositorys wie Packagist und GitHub veröffentlichen, sodass andere Entwickler von Ihrem Paket profitieren können.
Um das Konzept zu veranschaulichen, erstellen wir in Laravel eine Beispielseite, auf der ein Bild in die Amazon S3-Cloud hochgeladen wird. Anstelle des üblichen Ablaufs entwickeln wir es als Paketpaket, das einfach verteilt und gewartet werden kann.
Bevor ich weitermache, gehe ich davon aus, dass Sie mit dem Laravel-Framework bereits vertraut sind, da ich nicht auf die Details der grundlegenden Laravel-Konzepte eingehen möchte.
Außerdem benötigen Sie ein gültiges AWS-Konto und die Anmeldeinformationen, um auf die Amazon-API zugreifen zu können, um das Beispiel in diesem Artikel zu befolgen. Stellen Sie also sicher, dass Sie das zuerst einrichten.
Wenn alles verfügbar ist, sind wir bereit, in die tatsächliche Entwicklung einzutauchen.
Sehen wir uns kurz die Liste der Dateien an, die wir im Verlauf dieses Tutorials implementieren werden.
composer.json
: Wir müssen die Klassenzuordnung unseres Pakets in das vorhandene einfügen composer.json
Datei im Stammverzeichnis des Pakets.config / app.php
: Dies ist die vorhandene Datei, die wir verwenden, um einen Eintrag unseres benutzerdefinierten Diensteanbieters hinzuzufügen, damit Ansichten und Routen mit dieser Datei geladen werden können.composer.json
: Dies ist das paketspezifische composer.json
Datei, wenn Sie das Paket mit anderen verteilen möchten.packages / envato / aws / src / Anbieter / AwsServiceProvider.php
: Die übliche Laravel-Serviceanbieterdatei, die zum Laden anderer Komponenten des Pakets verwendet wird.packages / envato / aws / src / routes / web.php
: Es lädt die benutzerdefinierten Routen unseres Pakets.packages / envato / aws / src / Controller / AwsController.php
: Dies ist die Controller-Datei, die die Anwendungslogik unseres Pakets verarbeitet.packages / envato / aws / src / views / upload.blade.php
: Die View-Datei, die die Rendering-Logik behandelt.Machen Sie sich keine Sorgen, wenn es noch nicht viel Sinn ergibt, da wir im weiteren Verlauf alles ausführlich besprechen werden.
Wie bereits erwähnt, implementiert unser Paket den Anwendungsfall des Dateiuploads in die Amazon S3-Cloud. In diesem Abschnitt werden die Voraussetzungen beschrieben, die für die erfolgreiche Ausführung unseres Pakets erforderlich sind.
Als Laravel-Entwickler müssen Sie mit Flysystem vertraut sein, das eine schöne Abstraktionsebene für die Interaktion mit dem Dateisystem bietet. Es bietet einfach zu verwendende Treiber, so dass Sie problemlos mit ihm interagieren können, unabhängig von der Art des Dateisystems, mit dem Sie sich befassen - entweder das lokale Dateisystem oder das AWS S3-Cloud-System.
Um die Unterstützung des Amazon S3-Cloud-Dateisystems mit Flysystem zu aktivieren, müssen Sie das entsprechende Adapter-Composer-Paket installieren.
Führen Sie den folgenden Befehl aus, um das Paket flysystem-aws-s3-v3 zu installieren.
$ composer benötigt league / flysystem-aws-s3-v3
Nach der erfolgreichen Ausführung dieses Befehls können Sie jetzt Laravel Flysystem verwenden, um mit dem Amazon S3-Cloud-Dateisystem auf dieselbe Weise zu interagieren, wie Sie es für das lokale Dateisystem verwendet hätten.
Lassen Sie uns jetzt schnell die config / filesystems.php
Datei, um die Einstellungen für das Amazon S3-Dateisystem anzuzeigen.
… 'Festplatten' => ['local' => ['driver' => 'local', 'root' => Speicherpfad ('app'),], 'public' => ['driver' => 'local' , 'root' => Speicherpfad ('app / public'), 'url' => env ('APP_URL'). '/ storage', 'Sichtbarkeit' => 'public',], 's3' => [' driver '=>' s3 ',' key '=> env (' AWS_KEY '),' secret '=> env (' AWS_SECRET '),' region '=> env (' AWS_REGION '),' bucket '=> env ('AWS_BUCKET'),],],…
Wie Sie sehen, ist die Konfiguration für Amazon S3 bereits vorhanden. es ist nur so, dass wir angemessen einstellen müssen ENV
Variablen in der .env
Datei.
Fahren Sie fort und fügen Sie die folgenden Variablen in Ihr ein .env
Datei.
AWS_KEY = AWS_KEY_VALUE AWS_SECRET = AWS_SECRET_VALUE AWS_REGION = AWS_REGION_VALUE AWS_BUCKET = AWS_BUCKET_VALUE AWS_CDN_URL = AWS_CDN_URL_ 0.
Natürlich müssen Sie Platzhalter durch ihre tatsächlichen Werte ersetzen. Jetzt können Sie den Flysystem AWS S3-Adapter in Ihrer Laravel-Anwendung verwenden.
Um ein eigenes Laravel-Paket zu erstellen, müssen Sie zunächst eine geeignete Verzeichnisstruktur erstellen, die den Konventionen des Laravel-Systems entspricht. Ich gehe davon aus, dass Sie bereits eine grundlegende Laravel-Anwendung ausführen. in der Tat der Standard Blog Anwendung wird auch gut sein.
Mach weiter und erstelle das Pakete
Verzeichnis im Stammverzeichnis Ihrer Anwendung. In Anbetracht dessen, dass Sie Ihr Paket mit anderen verteilen werden, sollte die bevorzugte Struktur Ihres Pakets die folgende sein Lieferantenname / Paketname
.
Folgen Sie dieser Konvention und erstellen Sie eine envato / aws
Verzeichnis unter der Pakete
Verzeichnis. Wie du vielleicht erraten hast, envato
ist der Lieferantenname und aws
steht für den Paketnamen selbst. Schließlich erstellen wir ein Packages / envato / aws / src
Verzeichnis, das die Quelldateien unseres Pakets enthält.
Nun müssen wir Laravel über unser neues Paket informieren. Mach weiter und öffne die composer.json
Datei im Stammverzeichnis Ihrer Laravel-Anwendung und fügen Sie die "Envato \\ Aws \\": "packages / envato / aws / src"
Eintrag im Autoload-Bereich wie unten gezeigt.
… "Autoload": "classmap": ["database"], "psr-4": "App \\": "app /", "Envato \\ Aws \\": "packages / envato / aws / src ",…
Wie Sie sehen können, die Envato \ Aws \
Namespace wird dem zugeordnet Packages / envato / aws / src
Verzeichnis. Jetzt müssen wir nur noch den Befehl dump-autoload ausführen, um die Composer-Zuordnungen neu zu erstellen.
$ composer dump-autoload
Jetzt können Sie die Envato \ Aws \
Namensraum in Ihrer Anwendung, und die Dateien werden vom richtigen Speicherort abgerufen!
Lassen Sie uns nun ein Paket-spezifisch hinzufügen composer.json
Datei, damit Sie Ihr Paket an das Packagist-Repository verteilen können.
Gehe zum Pakete / envato / aws
Verzeichnis und führen Sie den folgenden Befehl aus, um eine composer.json
Datei für Ihr Paket.
$ composer init
Sie werden mit den üblichen Fragen aufgefordert, gehen Sie einfach durch und es wird eine erstellt composer.json
Datei.
Zumindest sollte es so aussehen.
"name": "envato / aws", "description": "Beispiel für das Hochladen von Dateien in die AWS S3 Cloud", "Mindeststabilität": "dev", "required":
In unserem Paket erstellen wir eine einfache Seite, die den Status der hochgeladenen Datei anzeigt. Wir müssen also eine Route erstellen, die dieser Seite zugeordnet ist.
Erstellen Sie eine Routendatei unter packages / envato / aws / src / routes / web.php
.
Benötigt es überhaupt eine Erklärung? Der naheliegende nächste Schritt ist das Erstellen der zugehörigen Controller-Datei.
Regler
Erstellen Sie eine Controller-Datei unter
packages / envato / aws / src / Controller / AwsController.php
mit folgenden Inhalten.Scheibe ('s3'); // lokalen Speicher laden $ localStorage = $ storage-> Platte ('local'); // Standardpfad des lokalen Speichers "storage / app" $ sourceFileContents = $ localStorage-> get ('test.jpg'); // Zieldateipfad in S3-Cloud $ destFilePath = 'test_new.jpg'; // init vars $ imageUrl = "; $ errorMsg ="; // Datei in AWS S3 hochladen, wenn ($ awsS3Storage-> put ($ destFilePath, $ sourceFileContents, 'public')) $ imageUrl = env ('AWS_CDN_URL'). env ('AWS_BUCKET'). '/'. $ destFilePath; else $ errorMsg = 'Hoppla! Etwas ist schief gelaufen :( '; // Rückrufansicht aufrufen (' aws :: upload ', [' imageUrl '=> $ imageUrl,' errorMsg '=> $ errorMsg]);Gehen wir die Datei durch, um zu verstehen, wofür jedes Stück Code gedacht ist.
Wir beginnen die Dinge, indem wir einen Namensraum unseres Controllers auf Namensraum setzen
Envato \ Aws \ Controller
. Erinnern wir uns, dass wir das Mapping von hinzugefügt habenEnvato \ Aws
zuPackages / envato / aws / src
in der Wurzelcomposer.json
Datei, damit es unsere Paketdateien finden kann.Als nächstes haben wir die definiert
hochladen
Eine Methode, die lokale Dateien mit der Amazon S3-Cloud synchronisieren muss. Wichtig ist hierbei das erste Argument der Upload-Methode, die nach dem\ Illuminate \ Contracts \ Filesystem \ Factory
Abhängigkeit. Während der Ausführung wird der entsprechende Laravel-Vertrag eingespritzt.Jetzt könnten wir die Factory-Instanz des Dateisystems verwenden, um bei Bedarf Platteninstanzen zu erstellen. Die Festplatteninstanz in Laravel ist der Treiber, mit dem Sie einfachen Zugriff auf darunterliegende Dateisysteme wie die lokale Festplatte, die Amazon S3-Cloud und dergleichen erhalten.
// Lade s3 Speicher $ awsS3Storage = $ storage-> Platte ('s3'); // lokalen Speicher laden $ localStorage = $ storage-> Platte ('local');Der Einfachheit halber übertragen wir die statische Bilddatei, die bereits unter dem lokalen Standardspeicher von Laravel verfügbar ist, und der Pfad ist vorhanden
lagerung / app / test.jpg
.Als ersten Schritt greifen wir den Inhalt der Quelldatei auf.
// Standardpfad des lokalen Speichers "storage / app" $ sourceFileContents = $ localStorage-> get ('test.jpg');Wenn alles wie beschrieben eingerichtet ist, sollten Sie eine Datei mit der put-Methode mit Amazon S3 synchronisieren können.
// Datei in AWS S3 hochladen, wenn ($ awsS3Storage-> put ($ destFilePath, $ sourceFileContents, 'public')) $ imageUrl = env ('AWS_CDN_URL'). env ('AWS_BUCKET'). '/'. $ destFilePath; else $ errorMsg = 'Hoppla! Etwas ist schief gelaufen :(';Stellen Sie sicher, dass Sie die AWS-Umgebungsvariablen korrekt festgelegt haben, nur für den Fall, dass etwas nicht wie erwartet funktioniert.
Als letztes rufen Sie eine Ansichtsdatei auf, die das synchronisierte Bild und eine entsprechende Meldung anzeigt.
// Rückansicht der Aufrufansicht ('aws :: upload', ['imageUrl' => $ imageUrl, 'errorMsg' => $ errorMsg]);Natürlich haben wir noch keine View-Datei erstellt, und genau darum geht es im nächsten Abschnitt.
Aussicht
Erstellen wir eine Ansichtsdatei unter
packages / envato / aws / src / views / upload.blade.php
mit folgenden Inhalten.Laravel @if (Route :: has ('login'))@if (Auth :: check ()) Startseite @else Login Registrieren @endif@endifDateiupload in S3 Cloud@if ($ imageUrl) @sonst $ errorMsg @endifEs handelt sich um eine ziemlich standardisierte Ansichtsdatei, die das hochgeladene Bild nach dem erfolgreichen Hochladen oder einer anderen Fehlermeldung anzeigt.
Dienstanbieter
Wir sind fast fertig mit unserem Paket, da wir die erforderlichen Dateien erstellt haben. Als nächsten Schritt erstellen Sie einen Dienstanbieter, mit dem wir die Routen und Ansichten unseres Pakets registrieren können.
Erstellen Sie eine Diensteanbieter-Datei unter
packages / envato / aws / src / Anbieter / AwsServiceProvider.php
mit folgenden Inhalten.loadRoutesFrom (__ DIR __. '/… /routes/web.php'); // Lade View-Dateien $ this-> loadViewsFrom (__ DIR __. '/… / views', 'aws'); // Veröffentlichungsdateien $ this-> publishes ([__DIR __. '/… / views' => resource_path ('views / vendor / aws'),]) / ** * Registrieren Sie die Anwendungsdienste. * * @return void * / public function register ()Natürlich können Sie auch die Service-Provider-Datei mit dem artisan-Befehl erstellen. Es hätte jedoch einen zusätzlichen Schritt zum Verschieben der Datei erforderlich gemacht
App / Anbieter
zu unserem Paket.Lassen Sie uns auf jeden Fall die soeben erstellte Service Provider-Datei durchgehen.
Zuerst laden wir die Routen und Ansichten, die mit unserem Paket verbunden sind.
// Routen laden $ this-> loadRoutesFrom (__ DIR __. '/… /routes/web.php'); // Lade View-Dateien $ this-> loadViewsFrom (__ DIR __. '/… / views', 'aws');Als Nächstes unterstützen wir Sie beim Veröffentlichen der Ansichten unserer Pakete, sodass die Entwickler, die die Ansichten überschreiben möchten, dies tun können. Nächstes Mal laufen sie die
PHP Handwerker Anbieter: veröffentlichen
Befehl, Laravel kopiert die Ansichten vonPackages / envato / aws / src / views /
zuRessourcen / Ansichten / Anbieter / AWS
.Nun können sie die Ansichten unter ändern
Ressourcen / Ansichten / Anbieter / AWS
Verzeichnis, und es wird automatisch von Laravel anstelle der Ansichten unter abgeholtPackages / envato / aws / src / views /
. Tatsächlich ist dies die richtige Methode, um Paketansichten von Drittanbietern zu ändern, anstatt die Paketansichten direkt zu ändern.Das ist es, was den Dienstanbieter angeht. Wie Sie es erwartet haben, müssen wir den Eintrag des Serviceanbieters hinzufügen
config / app.php
. Fügen Sie den folgenden Eintrag in derAnbieter
Array.… / * * Application Service Provider… * / App \ Providers \ AppServiceProvider :: Klasse, App \ Providers \ AuthServiceProvider :: Klasse, App \ Providers \ BroadcastServiceProvider :: Klasse, App \ Providers \ EventServiceProvider :: Klasse, App \ Providers \ RouteServiceProvider :: class, Envato \ Aws \ Providers \ AwsServiceProvider :: class, // Unser Paketdienstanbieter…Und da sind Sie - alles ist in Ordnung, damit wir unser Paket testen können.
Starten Sie die http: // Ihre-Laravel-Anwendung / aws / s3 / upload-URL in Ihrem Browser. Wenn alles gut läuft, sollten Sie das Bild auf Ihrer Seite sehen, das aus der Amazon S3-Cloud geladen wird. Bitte lassen Sie mich wissen, wenn Sie Probleme haben, und ich würde diese gerne beantworten.
Wir stehen also zum Abschlussbericht dieses Artikels und ich hoffe, es hat Ihnen gefallen!
Fazit
Heute haben wir eine der wichtigsten Funktionen des Laravel-Paketpakets diskutiert. Beim Einrichten unseres benutzerdefinierten Laravel-Pakets haben wir ein reales Beispiel gezeigt, in dem gezeigt wird, wie Sie ein Image in die Amazon S3-Cloud hochladen können.
Es ist ein wirklich schönes Feature, wenn Sie alle Funktionalitäten zusammenfassen und verteilen möchten. In der Tat könnten Sie dies als eine Option betrachten, um Ihre Entwicklung von benutzerdefinierten Modulen in Laravel zu verfolgen.
Für diejenigen unter Ihnen, die entweder gerade mit Laravel beginnen oder Ihr Wissen, Ihre Site oder Anwendung mit Erweiterungen erweitern möchten, haben wir eine Reihe von Dingen, die Sie auf dem Envato-Markt studieren können.
Wie immer können Sie Ihre wertvollen Kommentare und Rückmeldungen in den untenstehenden Feed hinterlassen!