PHPPamokos.lt


8. Išorinių paketų ir bibliotekų diegimas

Kad judėtume toliau ir išnaudotume visus Laravel privalumus, turime išmokti diegti išorines bibliotekas.

Pats Laravel yra tik framework'as, kurio griaučiai užima mažiau nei 1 MB. Visas veikimas vykdomas per /vendor kataloge esančius paketus ir bibliotekas. Ar pastebėjote, kad pats Laravel yra vienas iš paketų /vendor/laravel/framework kataloge?

Taigi, tokios sistemos būtų nuodemė neišnaudoti - ir, be abejo, yra prikurta labai daug išorinių paketų. Dar vienas pliusas yra Composer, kurio pagalba galime paprastai tuos paketus valdyti, diegti naujus ir atnaujinti esamus.

Pradėkime nuo to, kaip ieškoti naujų paketų. Tam yra bent kelios didelės paketų duomenų bazės (GitHub, BitBucket), kai kurios iš jų pritaikytos būtent Laravel platformai - kaip Packalyst. Tai patarimas - prieš bandydami išrasti dviratį ir sukurti kažką savo, paieškokite šiuose puslapiuose (ar šiaip per Google), ar tai jau nėra padaryta prieš jus. Geriausia ieškoti pagal raktažodžius - pvz "Mailchimp" arba "PDF".

Į ką atkreipti dėmesį, renkantis paketą? Visos sąlygos yra kaip ir savaime suprantamos, bet vis tiek papasakosiu. Tikslas - išsirinkti paketą, kuriuo galime pasitikėti - juk tai ne mūsų parašytas kodas, ir tikrai netikrinsime kiekvienos jo kodo eilutės (kitaip gal tada ir patiems galima jį parašyti). Sakykime, WordPress turinio valdymo sistemos platformoje yra didžiulės bėdos dėl diegiamų pluginų, kurie po to ne tik užlaužia visą svetainę, bet kartais ir prisiunčia virusų. Tai panaši logika ir čia - diegti imkitės tik tai, kuo galima pasitikėti. Aš asmeniškai taikau tokius kriterijus - sakykime, Packalyst atveju:

  • Parsisiuntimų skaičius - kad jis būtų didžiausias iš tos kategorijos ar to raktažodžio paketų (nebūtinai didelis nes kai kurios kategorijos tiesiog nėra populiarios)
  • Versija - tikrai neverta imti 1.0 versijos, nes dažniausiai ji turi krūvą klaidų. Kūrėjas turi būti bent kažkiek patobulinęs produktą. Kuo daugiau versijų buvo, tuo geriau.
  • Paskutinis atnaujinimas - jei paketas atnaujintas prieš metus (t.y. praktiškai tada kai pasirodė Laravel 5), tai jau kelia įtarimą. Tai dažniausiai reiškia, kad naudotis paketu galima, prisiimant atsakomybę sau - jei bus kokių bėdų, kūrėjas paketą numetė likimo valiai ir už nieką neatsako
  • Kad būtų tinkama Laravel 5 versijai (na, arba tai, kurią naudosite ateityje)
  • Kad būtų normali diegimo ir quick-start naudojimo instrukcija, o geriau ir platesnė dokumentacija

Toliau - sakykime, kad radome kažkokį paketą, kuris mums reikalingas. Kaip jį įdiegti ir panaudoti? Tai nėra visiškai paprasta - dažniausiai yra keli žingsniai.

1. Pridėti į composer.json

Pradėkime nuo composer.json analizės. Jei nežinote, kaip elgtis su šiuo failu ir ką jame redaguoti - suraskite dokumentaciją ir išmokite, tikrai pravers ne tik Laravel, bet ir bendrai ateityje programuojant su PHP. Taigi, mums įdomi skiltis "require" - būtent ten turime patalpinti paketus, nuo kurių bus priklausomas mūsų projektas. Taip taip, būtent priklausomas, nes jei į "require" įdėsime kažkokį paketą ir jo realiai neįdiegsime, Laravel spjaudysis ir mėtys klaidas.

Po Laravel diegimo "require" sąraše turėtume matyti tik vieną reikalavimą - patį Laravel frameworką: "laravel/framework": "5.4.*"" (arba jūsų atveju gali būti ir kitokia naujesnė versija). Tai reiškia, kad imama naujausia tuo metu egzistuojanti 5.4 versijos subversija - t.y. jei egzistuoja versija 5.4.7 ir 5.4.8, tai composer ims 5.4.8. Ir jeigu jūs lokaliai turite 5.4.7 versiją, o kūrėjas patalpino internete jau 5.4.8 versiją, tai komanda composer update parsiųs atnaujinimus (tame ir yra vienas didžiausių Composer privalumų).

Taigi, norėdami įdiegti paketą, pirmiausia įrašome jo eilutę į "require" skiltį. Pabandykime tai padaryti su konkrečiu pavyzdžiu - panaudokime PDF formavimo paketą laravel-dompdf. Po atnaujinimo mūsų composer.json "require" skiltis turi atrodyti taip:

"require": {
  "laravel/framework": "5.4.*",
  "barryvdh/laravel-dompdf": "dev-master",
},

Kas yra "dev-master" ir kodėl būtent toks variantas? Versija "dev-master" reiškia, kad Composer pasiims apskritai naujausią tuo metu esančią versiją. Kas dažniausiai ir yra tai, ko reikia, ar ne? Bet būkite atsargūs: kartais būna taip, kad paketas yra priklausomas nuo kitų paketų (taip, per tą patį composer.json kurį turi savyje), o mes galime būti neatnaujinę to antro ar netgi trečio lygio priklausomybių, ir tada naujausia mūsų norima versija gali tiesiog neįsidiegti, mesti klaidą, ir išvis negalėsime atnaujinti mūsų paketų. Tad spręskite savo nuožiūra, ar rašyti "dev-master", ar rinktis konkrečią versiją.

Ir, kai pridėjome failą į composer.json, leidžiame jo diegimą iš komandinės eilutės: composer install (arba composer update jei norite kartu atnaujinti ir kitus paketus). Turėtų susikurti to paketo katalogas bei failų struktūra Laravel kataloge /vendor.

 

2. Atnaujinti Service Providers

Jau turime įdiegę paketą, dabar reikia pasakyti Laravel sistemai, kaip jo ieškoti ir kaip naudoti - tam skirsime dar du žingsnius. Jie abu iš pirmo žvilgsnio gali pasirodyti nesuprantami, nes paliečia gilias Laravel frameworko šaknis, apie kurias šiame kurse nėra kalbama - tai Service Providers ir Facades. Tad kol kas supaprastinkime ir tiesiog priimkime kaip taisyklę - kad reikia atnaujinti šiuos du dalykus. Iš esmės, tai yra paketo "užregistravimas" Laravel sistemoje.

Atidarome failą config/app.php ir ieškome masyvo 'providers' - būtent į jo pabaigą reikia pridėti elementą, atitinkantį mūsų naująjį paketą. Tas elementas nusakys kelią iki to paketo Service Provider failo - kaip sakiau, šiam kartui nesigilinkite, kas būtent tai yra. Mūsų PDF paketo atveju įrašome taip:

'providers' => array(
  ... // kiti paketai
  Barryvdh\DomPDF\ServiceProvider::class,
)
 

3. Atnaujinti Aliases

Ir trečias dalykas, kurį reikia padaryti dažniausiai - tai pasakyti, kokiu vardu kreipsimės į mūsų paketą. Taip kaip kreipiamės į Laravel klases su dviem dvitaškiais (pvz Input::get()), taip turime užregistruoti ir mūsų paketo vardą - tai daroma tame pačiame faile config/app.php, tik kitame masyve - 'aliases'. Į jo pabaigą mūsų PDF paketo atveju įrašome:

'aliases' => array(
  ... // kiti paketai
  'PDF' => Barryvdh\DomPDF\Facade::class,
)
 

4. Paketo panaudojimas

Ir viskas, dabar galime naudoti vardą PDF:: bet kur savo projekte. Taigi, pabandykime sukurti paprasčiausią PDF dokumentą. routes/web.php:
Route::get('pdf', 'TestController@getPDF');
app/Http/Controllers/TestController.php:
class TestController extends Controller {

  public function getPDF() {
    $pdf = PDF::loadView('pdf.invoice', $data);
    return $pdf->download('invoice.pdf');
  }

}

Štai taip naudojami trečiųjų šalių paketai. Bent jau tie, kuriuos naudojame tokiu būdu per du dvitaškius, bet tai galioja ne visiems paketams - juk būna ir tokių, kurie atlieka kitokius veiksmus, pvz prideda Artisan komandų ar dirba su Views failais. Tad dėl konkretaus paketo diegimo skaitykite jo dokumentaciją, o jei tokios aiškios nėra - tai vienareikšmiškai nėra paketas, kurį verta diegti ar juo pasitikėti.

 

Namų darbai

Kaip turbūt galėjote nuspėti, jūsų darbas pabandyti įdiegti kokį nors kitą paketą. Kaip variantą siūlau jenssegers / agent, kuris leis jums atpažinti, iš kokios naršyklės ar įrenginio atėjo lankytojas. Sėkmės bandant!


(c) 2015-2018. Visais klausimais kreipkitės povilas@laraveldaily.com