Som PHP-utvecklare kan du vara intresserad av att arbeta med ramar. Ramverk försöker göra utvecklingsprocessen enklare genom att förenkla vanliga metoder som används i de flesta utvecklar webbprojekt som paket, moduler, plug-ins och jämn komponenter (CakePHP).
Kanske under utvecklingsprocessen känner du att du återuppfinner hjulet, till exempel när du skapar en autentisering eller Captcha-applikation. I det här fallet måste du skapa ett paket som kommer att förenkla och göra din apputveckling snabbare och enklare.
Det finns två typer av paket; vissa är ramar självständig (fristående) och de andra är för a specifik ram. Denna handledning kommer uteslutande att täcka Laravelpaket.
Innan du skapar ett paket måste du veta om pakethanterare. PEAR är en välkänd PHP-pakethanterare som, även om den är tillgänglig, sällan används. Varför? Det tvingade dig att installera paket över hela systemet, snarare än på projekt-för-projekt. Kompositören blev PEARs efterträdare.
En av parametrarna för scaling-ramkraften är hur utvecklaren omfördelar användbara kodpaket. Detta gör det möjligt för utvecklare att sammanfatta applikationer i flera paket med mindre applikationer.
Faktum är att paket erbjuder ett bra sätt att gruppera relaterad kod. Paketet liknar "Komponenter". Det är viktigt att notera att Laravel källkod är ett "paket", som Taylor Otwell kallar DEFAULT_BUNDLE
.
En stor fördel med Laravelpaket är att de tillåter åtkomst till alla funktioner som ramverket erbjuder till sin värdapplikation, inklusive routing, migreringar, test, visningar och många andra användbara funktioner. En annan viktig fördel med ett paket är DRY (Do not Repeat Yourself) principen. Genom att skapa ett paket för kod som du ofta använder, sparar du resurser och förbättrar programmets prestanda.
Låt oss nu presentera några användbara Laravelpaket. Paket som jag har använt inkluderar:
Du kan hitta den förpackningsfunktion du behöver i packalyst. Packalyst skapar ett enkelt och socialt paketregister för Laravel.
Skapa ett enkelt autentiseringspaket för Laravel 5.0. För att göra detta måste du först och främst a composer.json
fil för ditt nya paket:
"namn": "alireza / myauth", "beskrivning": "Hur skapar du ditt laravel 5-paket", "licens": "MIT", "författare": ["name": "Alireza Rahmani khalili", "email ":" [email protected] "]," minsta stabilitet ":" dev "," require ": " laravel / framework ":" ~ 5.0 "," autoload ": " psr-4 " "Alireza \\ Authentication \\": "src /"
Tjänsteleverantörsklassen är helt enkelt filen som sätter allt upp korrekt för paketet. Här är vad Tjänsteleverantören ska se ut vid denna tidpunkt, i src / MyAuthServiceProvider.php
:
namnrymd Alireza \ Authentication; använd Illuminate \ Support \ ServiceProvider; klass MyAuthServiceProvider utökar ServiceProvider / ** * Anger om laddning av leverantören är uppskjuten. * * @var bool * / protected $ defer = false; / ** * Bootstrap programhändelserna. * * @return void * / public function boot () / ** * Registrera tjänsteleverantören. * * @return void * / public function register () / ** * Få de tjänster som tillhandahålls av leverantören. * * @return array * / public function provides () return [];
Lägg till tjänsteleverantören till config / app.php
:
"Alireza \ Authentication \ MyAuthServiceProvider :: klass",
Nu är Laravel medveten om paketet. Du kan fråga om "alias" och varför jag inte lägger till den i mina app.php
. Personligen lägger jag till alias i registret för tjänsteleverantörsklassen istället för att lägga till det manuellt i Laravel config-filen. Jag kommer att ta itu med detta senare. Skapa nu en enkel PHP-klass som heter MyAuth
i src / MyAuth.php
:
namnrymd Alireza \ Authentication; använd Config, Request, Session, Hash; använd App \ User; Klass MyAuth public $ redirect_login = '/ users / home'; offentlig $ redirect_logout = '/ users / logout'; offentlig $ login = '/ user / login'; skyddad $ data; offentliga funktionen __construct () if (Request: isMethod ('post')) // Få postinmatningar $ this-> data = array ('username' => Input :: get ('användarnamn'), 'lösenord' = > Input :: get ('password')); inloggning av allmän funktion ($ data = false) $ this-> data = $ data; om ($ this-> data &&! is_array ($ this-> data)) returnera omdirigering ($ this-> login) -> med ('meddelande', 'förlåt ingen matris för att logga in manuellt') -> skicka ); $ resultat- Användare :: Var (['email' => $ this-> data ['användarnamn']]) -> först ($ this-> data &&! Session :: har ('användare')) ); om ($ resultat && Hash :: check ($ this-> data ['password'], $ result-> lösenord)) Session :: put ('user', $ result); returnera Omdirigering ($ this-> redirect_login) -> med ('meddelande', 'Välkommen inloggning lyckades') -> skicka (); Session :: flush (); returnera omdirigering ($ this-> login) -> med ('meddelande', 'Inloggning misslyckades, fel användarnamn eller lösenord') -> skicka (); public function logout () Session :: flush (); returnera omdirigering ($ this-> login) -> med ('message', 'logout lyckades') -> send ();
Autentiseringsklassen bör binda med Laravels IoC Container till paketleverantören. Innan det skapar du en fasadklass som tillåter användning av klassmetoder utan att behöva skapa en ny instans, liksom andra fördelar som tidigare angivits. Precis som MyAuth-klassen skapade den nya katalogen fasader
Skapa en ny PHP-klass i namnfältet och namnge den src / MyAuthFacade.php
:
namnrymd Alireza \ Authentication; använd Belysa \ Stöd \ Fasader \ Fasad; klass MyAuthFacade utökar fasad skyddad statisk funktion getFacadeAccessor () returnera 'MyAuth';
Därefter är det enda som återstår att starta paketet. Mine ser ut som:
public function register () $ this-> app ['MyAuth'] = $ this-> app-> share (funktion ($ app) returnera nya MyAuth;); $ this-> app-> boot (funktion () $ loader = \ Illuminate \ Foundation \ AliasLoader :: getInstance (); $ loader-> alias ('MyAuth', 'Alireza \ Authentication \ MyAuthFacade'););
Som du kan se har jag bundit Myauth-klassen med IoC Container. Nu är det enkelt att använda MyAuth-klassen:
MyAuth :: inloggning ([ 'username' => '[email protected]', 'lösenord' => 'test']);
Detta bör generera meddelandet, Välkommen inloggning lyckades.
Om så önskas kan du nu registrera ditt paket i Packagist. MyAuth-paketet har nu registrerats och kan enkelt ingå i Laravel via komponentkommandot: kompositören kräver "alireza / myauth"
.
Om du letar efter ett exempel på ett populärt, moget Laravel-paket, kan du kolla in TerranetAdmin för Laravel.
Detta var en kort översikt över hur man skapar ett Laravel 5-paket. Som du kan se är det enkelt att skapa paketet och det kan vara ett viktigt verktyg för att förenkla och påskynda utvecklingsprocessen.