Som PHP-utvikler kan du være interessert i å jobbe med rammer. Rammer forsøker å gjøre utviklingsprosessen lettere ved å forenkle felles praksis som brukes i de fleste utvikler webprosjekter som pakker, moduler, plug-ins og til og med komponenter (CakePHP).
Kanskje under utviklingsprosessen føler du at du gjenoppfinner hjulet, for eksempel når du oppretter en Authentication eller Captcha-applikasjon. I dette tilfellet må du opprette en pakke som vil forenkle og gjøre apputviklingen raskere og enklere.
Det finnes to typer pakker; noen er rammeverk uavhengig (frittstående) og de andre er for en spesifikt rammeverk. Denne opplæringen vil utelukkende dekke Laravel-pakker.
Før du lager en pakke, må du vite om pakkeforvaltere. PEAR er en velkjent PHP pakkeforvalter som, selv om den er tilgjengelig, sjelden brukes. Hvorfor? Det tvunget deg til å installere pakker hele systemet, i stedet for på prosjekt-for-prosjekt basis. Komponist ble PEARs etterfølger.
En av parameterne for skalering av rammekraft er hvordan utvikleren omfordeler nyttige pakker med kode. Dette gjør at utviklere kan oppsummere applikasjoner i flere pakker med mindre applikasjoner.
Faktisk tilbyr pakker en fin måte å gruppere relatert kode på. Pakker ligner veldig på "Komponenter". Det er viktig å merke seg at Laravel kildekoden er en "pakke", som Taylor Otwell kaller DEFAULT_BUNDLE
.
En stor fordel med Laravel-pakker er at de tillater tilgang til alle funksjonene rammen tilbyr til vertsprogrammet, inkludert ruting, migreringer, tester, visninger og mange andre nyttige funksjoner. En annen viktig fordel med en pakke er DRY (Do not Repeat Yourself) prinsippet. Ved å lage en pakke for kode du ofte bruker, sparer du ressurser og forbedrer programmets ytelse.
La oss nå introdusere noen nyttige Laravel-pakker. Pakker jeg har brukt inkluderer:
Du kan finne pakkingskapasiteten du trenger i pakker. Packalyst oppretter et enkelt og sosialt pakkeregister for Laravel.
Opprett en enkel godkjenningspakke for Laravel 5.0. For å gjøre dette, først og fremst trenger du en composer.json
fil for den nye pakken din:
"navn": "alireza / myauth", "beskrivelse": "Hvordan lage din laravel 5 pakke", "lisens": "MIT", "forfattere": ["name": "Alireza Rahmani khalili" ":" [email protected] "]," minimumsstabilitet ":" dev "," require ": " laravel / framework ":" ~ 5.0 "," autoload ": " psr-4 " "Alireza \\ Authentication \\": "src /"
Tjenesteleverandørklasse er ganske enkelt filen som setter alt opp riktig for pakken. Her ser tjenesteleverandøren ut på dette tidspunktet i src / MyAuthServiceProvider.php
:
namespace Alireza \ Autentisering; bruk Illuminate \ Support \ ServiceProvider; klasse MyAuthServiceProvider utvider ServiceProvider / ** * Angir om lasting av leverandøren er utsatt. * * @var bool * / beskyttet $ defer = false; / ** * Bootstrap programhendelsene. * * @return void * / public function boot () / ** * Registrer tjenesteleverandøren. * * @return void * / offentlig funksjon register () / ** * Få tjenestene som tilbys av leverandøren. * * @return array * / offentlig funksjon gir () return [];
Legg til tjenesteleverandøren til config / app.php
:
'Alireza \ Authentication \ MyAuthServiceProvider :: klassen',
Nå er Laravel klar over pakken. Du kan spørre om "alias" og hvorfor jeg ikke legger til det i min app.php
. Personlig legger jeg til alias i registermetoden til tjenesteleverandørklassen i stedet for å legge den manuelt til Laravel config-filen. Jeg vil adressere dette senere. Opprett nå en enkel PHP-klasse som heter MyAuth
i src / MyAuth.php
:
namespace Alireza \ Autentisering; bruk Config, Request, Session, Hash; bruk App \ User; Klasse MyAuth public $ redirect_login = '/ users / home'; offentlig $ redirect_logout = '/ users / logout'; offentlig $ login = '/ user / login'; beskyttet $ data; offentlig funksjon __construct () if (Forespørsel :: isMethod ('post')) // Få postinnganger $ this-> data = array ('username' => Input :: get ('brukernavn'), 'passord' = > Input :: get ('passord')); offentlig funksjon logg inn ($ data = false) $ this-> data = $ data; hvis ($ this-> data &&! is_array ($ this-> data)) returnere omdirigering ($ this-> login) -> med ('melding', 'beklager ingen matrise for å logge inn manuelt') -> send ); $ result = User :: Where (['email' => $ this-> data ['brukernavn']]) -> første ( ); hvis ($ resultat && Hash :: sjekk ($ dette-> data ['passord'], $ resultat-> passord)) Session :: put ('bruker', $ resultat); returnere omadressering ($ this-> redirect_login) -> med ('melding', 'Velkommen innlogging lyktes') -> send (); Session :: flush (); returnere omdirigering ($ this-> login) -> med ('melding', 'Innlogging mislyktes, feil brukernavn eller passord') -> send (); offentlig funksjon logout () Session :: flush (); returnere omdirigering ($ this-> login) -> med ('message', 'logout lyktes') -> send ();
Autentiseringsklassen skal binde med Laravel's IoC Container til tjenesteleverandøren av pakken. Før det oppretter du en fasadeklasse som tillater bruk av klassemetoder uten å måtte opprette en ny forekomst, samt andre fordeler som tidligere ble indikert. Akkurat som MyAuth-klassen opprettet den nye katalogen fasader
I Facades-katalogen, opprett en ny PHP-klasse og gi den navnet src / MyAuthFacade.php
:
namespace Alireza \ Autentisering; bruk Belyser \ Støtte \ Fasader \ Facade; klasse MyAuthFacade utvider fasade beskyttet statisk funksjon getFacadeAccessor () return 'MyAuth';
Etter dette er det eneste som gjenstår å bootstrap pakken. Mine ser ut som:
offentlige funksjonsregister () $ this-> app ['MyAuth'] = $ this-> app-> share (funksjon ($ app) returner ny MyAuth;); $ this-> app-> boot (funksjon () $ loader = \ Illuminate \ Foundation \ AliasLoader :: getInstance (); $ loader-> alias ('MyAuth', 'Alireza \ Authentication \ MyAuthFacade'););
Som du kan se, har jeg bundet Myauth-klassen med IoC Containeren. Nå er det enkelt å bruke MyAuth-klassen:
MyAuth :: innlogging ([ 'brukernavn' => '[email protected]', 'passord' => 'test']);
Dette burde generere meldingen, Velkommen logg inn lyktes.
Hvis ønskelig, kan du nå registrere pakken din i Packagist. MyAuth-pakken er nå registrert og kan lett inkluderes i Laravel via komponentkommandoen: komponist krever "alireza / myauth"
.
Hvis du leter etter et eksempel på en populær, moden Laravel-pakke, kan du sjekke ut TerranetAdmin for Laravel.
Dette var en kort oversikt over hvordan du lager en Laravel 5-pakke. Som du ser, er det enkelt å lage pakken, og kunne være et viktig verktøy for å forenkle og øke utviklingsprosessen.