În acest articol, vom continua și vom explora caracteristica de gestionare a pachetelor din cadrul Laravel. În cursul articolului, vom trece printr-un exemplu din lumea reală pentru a demonstra scopul articolului.
Managementul pachetelor din Laravel este o caracteristică importantă care vă permite să îmbinați o bucată de funcționalitate astfel încât să poată fi distribuită cu ușurință. Mai mult decât atât, puteți publica întotdeauna pachetul dvs. în depozite cum ar fi Packagist și GitHub care permit altor dezvoltatori să beneficieze de pachetul dvs..
Pentru a demonstra conceptul, vom construi o pagină de exemplu în Laravel care încarcă o imagine în norul Amazon S3. În loc să mergem cu fluxul obișnuit, îl vom dezvolta ca pe un pachet care poate fi distribuit și menținut cu ușurință.
Înainte de a merge mai departe, presupun că sunteți familiarizat cu cadrul Laravel, deoarece nu voi intra în detaliile conceptelor de bază Laravel.
De asemenea, trebuie să aveți un cont AWS valabil și datele de acreditare pentru a accesa API-ul Amazon pentru a urma, împreună cu exemplul din acest articol. Deci, asigurați-vă că ați stabilit asta mai întâi.
Cu totul la îndemână, suntem gata să ne aruncăm o privire asupra dezvoltării reale.
Să examinăm rapid lista fișierelor pe care le vom implementa pe parcursul acestui tutorial.
composer.json
: Trebuie să adăugăm cartografia de clasă a pachetului nostru în pachetul existent composer.json
fișier în rădăcina pachetului.config / app.php
: Acesta este fișierul existent pe care îl vom folosi pentru a adăuga o intrare a furnizorului nostru de servicii personalizate, astfel încât să putem încărca vizualizări și rute utilizând fișierul respectiv.composer.json
: Acesta este pachetul specific composer.json
fișierul doriți să distribuiți pachetul împreună cu alții.pachete / Envato / AWS / src / Furnizori / AwsServiceProvider.php
: Fișierul obișnuit de furnizor de servicii Laravel care va fi utilizat pentru încărcarea altor componente ale pachetului.pachete / Envato / AWS / src / rute / web.php
: Încarcă rutele personalizate ale pachetului nostru.pachete / Envato / AWS / src / Controllers / AwsController.php
: Acesta este fișierul de controler care gestionează logica aplicației din pachetul nostru.pachete / Envato / AWS / src / opinii / upload.blade.php
: Fișierul de vizualizare care gestionează logica de redare.Nu vă faceți griji dacă nu prea are sens, deoarece vom discuta totul în detaliu pe măsură ce vom trece prin el.
După cum am discutat mai devreme, pachetul nostru implementează cazul de încărcare a fișierelor în cloud Amazon S3. În această secțiune, vom trece prin premisele care trebuie configurate pentru a putea executa cu succes pachetul nostru.
Ca dezvoltator Laravel, trebuie să fiți familiarizați cu Flysystem, care oferă un strat de abstracție frumos pentru a interacționa cu sistemul de fișiere. Acesta oferă drivere ușor de utilizat, astfel încât să puteți interacționa ușor cu acesta, indiferent de tipul de sistem de fișiere cu care lucrați - fie sistemul de fișiere local, fie sistemul de cloud AWS S3.
Pentru a permite suportul sistemului de fișiere de tip cloud Amazon S3 cu Flysystem, trebuie să instalați pachetul corespunzător pentru compozitorul adaptorului.
Mergeți mai departe și rulați următoarea comandă de compilator de la root-ul proiectului pentru a instala pachetul flysystem-aws-s3-v3.
$ compozitorul necesită liga / flysystem-aws-s3-v3
După executarea cu succes a respectivei comenzi, acum puteți utiliza Laravel Flysystem pentru a interacționa cu sistemul de fișiere de tip cloud Amazon S3 în același mod în care l-ați fi folosit pentru sistemul de fișiere local.
Acum, hai să tragem rapid config / filesystems.php
fișier pentru a vedea setările furnizate pentru sistemul de fișiere Amazon S3.
... ',' public '=> [' driver '=>' local '=> , 'root' => path_path ('app / public'), 'url' => env ('APP_URL'). șofer '=>' s3 ',' cheie '=> env (' AWS_KEY '),' secret '=> env (' AWS_SECRET '),' region '=> env (' AWS_REGION ' ("AWS_BUCKET"),],], ...
După cum puteți vedea, configurația este deja în vigoare pentru Amazon S3; este doar că trebuie să stabilim acest lucru ENV
variabile în .env
fişier.
Mergeți mai departe și adăugați următoarele variabile în dvs. .env
fişier.
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_VALUE
Desigur, trebuie să înlocuiți substituenții cu valorile lor reale. Acum, sunteți gata să utilizați adaptorul Flysystem AWS S3 în aplicația dvs. Laravel.
Pentru a vă crea propriul pachet Laravel, primul lucru este să creați o structură de directoare corespunzătoare care să reflecte convențiile sistemului Laravel. Presupun că aveți deja o aplicație de bază Laravel; de fapt, implicit blogul se va aplica și ea.
Continuați și creați pachete
director din aplicația dvs. Considerând că veți distribui pachetul dvs. cu alții, structura preferată a pachetului dvs. ar trebui să fie VENDOR_NAME / nume_pachet
.
După această convenție, să mergem mai departe și să creăm un Envato / AWS
director în cadrul pachete
director. După cum probabil ați ghicit, Envato
este numele furnizorului și AWS
reprezintă numele pachetului propriu-zis. În cele din urmă, să creăm a pachete / Envato / AWS / src
care deține fișierele sursă ale pachetului nostru.
Acum, trebuie să-l informăm pe Laravel despre noul nostru pachet. Mergeți și deschideți composer.json
fișier în rădăcina aplicației dvs. Laravel și adăugați "Envato \\ Aws \\": "pachete / envato / aws / src"
intrare în secțiunea autoload după cum se arată mai jos.
... "autoload": "classmap": ["baze de date"], "psr-4": "packages \ envato / aws / src ", ...
După cum puteți vedea, Envato \ Aws \
spațiul de nume este mapat la pachete / Envato / AWS / src
director. Acum, trebuie doar să rulați comanda dump-autoload pentru a regenera mapările compozitorului.
$ compunere dump-autoload
Acum, puteți folosi Envato \ Aws \
spațiu de nume în aplicația dvs. și va prelua fișierele din locația corectă!
Acum, hai să mergem mai departe și să adăugăm un pachet specific composer.json
astfel încât să puteți distribui pachetul în depozitul de ambalare.
Mergeți la Pachete / Envato / AWS
director și executați următoarea comandă pentru a genera o composer.json
fișier pentru pachetul dvs..
$ init compozitor
Veți fi invitați la întrebările obișnuite, așa că treceți prin ea și veți crea o composer.json
fişier.
Cel puțin ar trebui să pară așa.
"nume": "envato / aws", "descriere": "Exemplu de încărcare fișier în Cloud AWS S3", "minimum-stabilitate": "dev";
În pachetul nostru, vom crea o pagină simplă care afișează starea fișierului încărcat. Așadar, trebuie să creați un traseu asociat cu acea pagină.
Să creăm un fișier de rută la pachete / Envato / AWS / src / rute / web.php
.
Are nevoie de explicații? Următorul pas evident este crearea fișierului de controler asociat.
Controlor
Să creăm un fișier de controler la
pachete / Envato / AWS / src / Controllers / AwsController.php
cu următorul conținut.disc ( 's3'); // încărcați spațiul de stocare local $ localStorage = $ storage-> disk ('local'); // calea implicită a stocării locale "storage / app" $ sourceFileContents = $ localStorage-> get ('test.jpg'); // destinație filepath în cloud S3 $ destFilePath = 'test_new.jpg'; / / init vars $ imageUrl = "; $ errorMsg ="; // încărcați fișierul în AWS S3 dacă ($ awsS3Storage-> put ($ destFilePath, $ sourceFileContents, 'public')) $ imageUrl = env ('AWS_CDN_URL'). env ("AWS_BUCKET"). '/'. $ DestFilePath; altceva $ errorMsg = 'Oops! A apărut ceva în neregulă: ('; // vizualizare vizualizare apel vizualizare (' aws :: upload ', [' imageUrl '=> $ imageUrl,' errorMsg '=> $ errorMsg]);Hai să trecem prin dosar pentru a înțelege ce înseamnă fiecare bucată de cod.
Începem lucrurile prin stabilirea unui spațiu de nume al controlorului nostru în spațiul de nume
Envato \ Aws \ Controllere
. Rețineți că am adăugat cartografiaEnvato \ Aws
lapachete / Envato / AWS / src
în rădăcinăcomposer.json
astfel încât să poată găsi fișierele noastre pachet.Apoi, am definit
încărcați
care face sincronizarea fișierelor locale cu norul Amazon S3. Cel mai important lucru pe care trebuie să-l observăm aici este primul argument al metodei de încărcare care solicită\ Illuminate \ Contracte \ Filesystem \ Fabrica
dependenţă. În timpul executării, se va injecta contractul Laravel corespunzător.Acum, am putea folosi instanța fabrică a sistemului de fișiere pentru a crea instanțe de disc după cum este necesar. Exemplu de disc din Laravel este driverul care vă permite accesul facil la sistemele de fișiere care stau la baza, cum ar fi discul local, norul Amazon S3 și altele asemănătoare.
// încărcați spațiul de stocare s3 $ awsS3Storage = $ storage-> disk ('s3'); // încărcați spațiul de stocare local $ localStorage = $ storage-> disk ('local');Pentru simplificare, vom transfera fișierul imagine statică care este deja disponibil în spațiul de stocare local implicit al lui Laravel, iar calea este
stocare / app / test.jpg
.Ca un prim pas, hai să luăm conținutul fișierului sursă.
// calea implicită a stocării locale "storage / app" $ sourceFileContents = $ localStorage-> get ('test.jpg');Cu totul setat așa cum sa menționat, ar trebui să puteți sincroniza un fișier cu Amazon S3 folosind metoda put.
// încărcați fișierul în AWS S3 dacă ($ awsS3Storage-> put ($ destFilePath, $ sourceFileContents, 'public')) $ imageUrl = env ('AWS_CDN_URL'). env ("AWS_BUCKET"). '/'. $ DestFilePath; altceva $ errorMsg = 'Oops! Ceva n-a mers bine :(';Asigurați-vă că ați setat corect variabilele de mediu AWS, doar în cazul în care ceva nu funcționează conform așteptărilor.
Și ultimul lucru este de a apela un fișier de vizualizare care afișează imaginea sincronizată și un mesaj corespunzător.
// vizualizare retur vizualizare apel ('aws :: upload', ['imageUrl' => $ imageUrl, 'errorMsg' => $ errorMsg]);Desigur, nu am creat încă un fișier de vizualizare și tocmai asta este următoarea secțiune.
Vedere
Să creăm un fișier de vizualizare la
pachete / Envato / AWS / src / opinii / upload.blade.php
cu următorul conținut.Laravel @if (Route :: are ('login'))@if (Auth :: check ()) Pagina principală @ notă Conectare Înregistrare @endif@endifÎncărcați fișierul în S3 Cloud@if ($ imageUrl) @else $ errorMsg @endifEste un fișier de vizualizare destul de standard care afișează imaginea încărcată la încărcarea cu succes sau altfel un mesaj de eroare adecvat.
Furnizor de servicii
Aproape am terminat cu pachetul nostru, deoarece am creat fișierele necesare. Următorul pas este să creați un furnizor de servicii, astfel încât să putem înregistra rutele și vederile pachetului nostru.
Să creăm un fișier de furnizor de servicii la
pachete / Envato / AWS / src / Furnizori / AwsServiceProvider.php
cu următorul conținut.loadRoutesFrom (__ DIR __. / / /routes/web.php '); // încărcați fișierele de vizualizare $ this-> loadViewsFrom (__ DIR __. '/ ... / views', 'aws'); // publicarea fișierelor $ this-> publică ([__DIR __. '/ ... / views' => resource_path ('views / vendor / aws'),]); / ** * Înregistrați serviciile de aplicație. * * @return void * / registru funcțional public ()Evident, ați fi putut crea fișierul furnizorului de servicii utilizând și comanda artizanilor. Dar ar fi fost nevoie de un pas suplimentar de mutare a fișierului
app / Furnizori
la pachetul nostru.Oricum, să trecem prin fișierul furnizorului de servicii care tocmai a fost creat.
În primul rând, încărcăm rutele și vederile asociate pachetului nostru.
// încărcați rutele $ this-> loadRoutesFrom (__ DIR __. / / /routes/web.php '); // încărcați fișierele de vizualizare $ this-> loadViewsFrom (__ DIR __. '/ ... / views', 'aws');În continuare, oferim suportul publicării opiniilor pachetelor noastre, astfel încât dezvoltatorii care doresc să suprascrie vizualizările pot face acest lucru. Data viitoare când rulează
php artizan vânzător: publicare
comandă, Laravel copiază vizualizările de lapachete / Envato / AWS / src / opinii /
laresurse / vizualizări / furnizor / AWS
.Acum, ei pot schimba punctele de vedere în cadrul
resurse / vizualizări / furnizor / AWS
director, iar acesta va fi preluat automat de către Laravel în loc de vizualizările de subpachete / Envato / AWS / src / opinii /
. De fapt, este modalitatea corectă de a modifica vizualizările de pachete terță parte, în loc să modificați în mod direct vizualizările de pachete.Asta e în ceea ce privește furnizorul de servicii. După cum v-ați fi așteptat, trebuie să adăugați intrarea furnizorului de servicii în
config / app.php
. Adăugați următoarea intrare înfurnizorii de
mulțime.... / * * Furnizorii de servicii de aplicații ... * / App \ Providers \ AppServiceProvider :: Class, App \ Providers \ AuthServiceProvider :: Class, App \ Providers \ BroadcastServiceProvider :: class, App \ Providers \ EventServiceProvider :: class, App \ RouteServiceProvider :: clasa, Envato \ Aws \ Providers \ AwsServiceProvider :: clasa, // Furnizorul nostru de pachete ...Și tu ești ... totul este în ordine acum, ca să putem merge și să încercăm pachetul nostru.
Continuați și rulați URL-ul http: // your-laravel-application / aws / s3 / upload în browserul dvs. Dacă totul merge bine, ar trebui să vedeți imaginea de pe pagina dvs. care este încărcată din norul Amazon S3. Te rog anunțați-mă dacă vă confruntați cu probleme și aș fi mai mult decât bucuros să le răspund.
Deci, suntem pe nota de încheiere a acestui articol și sper că v-ați bucurat de ea!
Concluzie
Astăzi, am discutat despre una dintre trăsăturile importante ale managementului pachetului cadru Laravel. În procesul de creare a pachetului Laravel personalizat, am trecut printr-un exemplu din lumea reală care a demonstrat cum ați putea încărca o imagine în cloudul Amazon S3.
Este o caracteristică foarte plăcută dacă doriți să conectați și să distribuiți împreună un set de funcționalități. De fapt, ai putea să te uiți la asta ca pe o opțiune de a aborda dezvoltarea personalizată a modulelor tale în Laravel.
Pentru cei care sunteți fie doar începători cu Laravel, fie căutați să vă extindeți cunoștințele, site-ul sau aplicația cu extensii, avem o varietate de lucruri pe care le puteți studia pe piața Envato.
Ca întotdeauna, puteți lăsa comentariile dvs. valoroase și feedback-ul în feed-ul de mai jos!