Hur man skapar en Laravel Helper

Till att börja med skulle jag hellre låta Laravel officiella webbplats tala om hjälpare.

Laravel innehåller en mängd globala "hjälpar" -funktioner. Många av dessa funktioner används av själva ramverket; Du är dock fri att använda dem i dina egna applikationer om du finner dem praktiska.

Så i princip är hjälpare i Laravel inbyggda verktygsfunktioner som du kan ringa var som helst inom din ansökan. Om de inte hade tillhandahållits av kärnramen kunde du ha hamnat på att utveckla dina egna hjälparklasser.

Även om kärnan ger en mängd olika hjälpmedel finns det alltid en chans att du behöver din egen och vill utveckla en så att du inte behöver upprepa samma kod här och där och därigenom upprätthålla bättre underhåll. Du lär dig hur du skapar en anpassad Laravelhjälpare i denna handledning.

Hjälpare i Laravel

Som vi diskuterade tidigare finns det många hjälpare som finns i kärnan i Laravel-ramverket. De grupperas ihop baserat på funktionaliteten de tillhandahåller. Här är en lista över hjälpargrupper.

arrayer

Hjälpare i denna grupp ger funktionalitet för att manipulera arrayelement. Ofta är du inte i den situation där du vill utföra olika operationer på matriselement. Så det här är den plats där du bör se först för att se om det du söker redan existerar.

Paths

Jag hittar hjälpare i den här kategorin mest användbara. De returnerar den fullständiga sökvägen till olika kataloger som app, lagring, config och liknande. Jag antar att du använder de flesta av dessa hjälpare redan i din Laravel-ansökan.

strängar

Strängmanipulation är något oundvikligt i din dagliga applikationsutveckling. Även om det finns gott om strängmanipuleringsfunktioner som tillhandahålls av PHP själv, hittar du några mer användbara godisar i det här avsnittet.

Webbadresser adresser~~POS=HEADCOMP

Du hittar mycket få i den här kategorin, men de används i hela applikationen. De används för att skapa URL-adresser för rutt-, tillgångs- och formuläråtgärder.

Diverse

Den här kategorin innehåller hjälpare som tillhandahåller en mängd olika funktioner, allt från att logga till felsökning och många fler.

För en fullständig referens av Laravel-hjälpare finns det ingen bättre plats än den officiella dokumentationen.

Skapa din första anpassade hjälpen

Nu har du en grundläggande förståelse för Laravelhjälpare och vad de används till. I det här avsnittet ska jag fortsätta och visa hur du kan skapa din egen anpassade hjälpen som kan användas globalt i ditt Laravel-program.

För att hålla sakerna enkla och lätta att förstå, blir det en ganska grundläggande hjälpreda som tar en användarid och returnerar ett användarnamn som svar. Det låter naturligtvis inte bra, men jag tror att det är tillräckligt att visa konceptet, och du kan alltid förlänga det för att uppfylla dina komplexa krav.

Jag antar att du har en användartabell i din databas och den har minst två fält-användarnamn och användarnamn.

Skelettet av en Laravel Helper

Innan vi går vidare och faktiskt skapar filerna, låt oss snabbt titta på de filer som vi ska skapa i resten av artikeln.

  • app / Hjälpare / Envato / user.php: Det är vår hjälpfil som håller vår hjälpars logik.
  • app / leverantörer / EnvatoServiceProvider.php: Det är en anpassad tjänsteleverantörsfil som laddar vår anpassade hjälparfil.
  • config / app.php: I den här filen kommer vi att förklara vår kundanpassade tjänsteleverantör, och det hjälper oss också att definiera ett alias till vår hjälpare så att vi inte behöver använda vårt fullständiga kvalificerade klassnamn på vår hjälpare.
  • rutter / web.php: En ganska vanlig Laravel rutefil där vi faktiskt ska testa vår hjälpare.

Skapa hjälparfiler

Även om du kan placera dina hjälparfiler var som helst i din ansökan, tyder det mer intuitiva och vanliga sättet på att det ska gå under din app katalog.

Så fortsätt och skapa en Hjälpare / Envato katalog under app och skapa en user.php fil med följande innehåll. Naturligtvis kan du placera den direkt under app eller app / Hjälpare katalog, men att tillhandahålla den extra nivån tillåter oss att organisera våra hjälpare i gott skick, speciellt när du kommer att ha gott om dem.

var ('userid', $ user_id) -> första (); returnera (isset ($ user-> användarnamn)? $ användarnamn-> användarnamn: ");

Filen börjar med en ganska standard namnområdesdeklaration:

namespace App \ Helpers \ Envato;

Syftet med vår anpassade hjälpare är att hämta ett användarnamn baserat på en användarid. Därför måste vi interagera med databasen, och det tvingar oss att inkludera DB-fasad.

använd Illuminate \ Support \ Facades \ DB;

För dem som inte känner till Laravelfasaderna är det bara ett annat bekvämt sätt att komma åt objekten i servicebehållare. Alternativt kan du ha använt beroendeinsprutning.

Att gå framåt kommer det konkreta genomförandet av vår hjälpare. Som du kan se finns det en statisk metod som definierar logiken att hämta ett användarnamn baserat på en användarid.

$ user = DB :: table ('users') -> var ('userid', $ user_id) -> första ();

De $ användare objektet håller databasregistret med matchande userid. Slutligen returnerar metoden användarnamnet som ett svar i följande uttalande.

returnera (isset ($ user-> användarnamn)? $ användarnamn-> användarnamn: ");

Det är så långt som vår hjälparfil är berörda.

Nu har vi skapat vår hjälparfil, men frågan är hur ska du använda den? Två snabba lösningar kommer till mig:

  • Du kan inkludera vårt hjälparfilnamn i composer.json, så att den laddas automatiskt. Då kan du genast ringa den statiska metoden för vår hjälparklass.
  • Du kan gå vidare och skapa en Laravel-tjänsteleverantör som låter dig registrera din anpassade hjälparfil så att Laravel-ramen laddar den tillsammans med andra beroenden. Registrera den tjänsteleverantören i Laravel-konfigurationen och skapa ett alias för att använda din hjälpare.

Naturligtvis är den första ganska snabb och enkel att genomföra, och du kan bli frestad att göra det, men jag vill hellre föreslå den senare eftersom det ser ut som mer av en hantverksmässig väg och är mer underhållbar.

Flytta till kommandoraden och kör följande kommando i din applikationsrot för att skapa en ny tjänsteleverantör.

$ php artisan make: leverantör EnvatoServiceProvider Provider skapades framgångsrikt.

Du bör se meddelandet som bekräftar att det har skapats framgångsrikt under app / leverantörer katalog.

Öppna den filen och du bör redan se två metoder där ute. Det viktiga i sammanhanget med denna artikel är Registrera metod. Ja, det är tomt just nu, så låt oss mata in några saker för att göra det mer användbart.

offentliga funktionsregister () require_once app_path (). '/Helpers/Envato/User.php'; 

Registreringsmetoden används för att registrera dina beroenden, och vi har exakt gjort det. Vi har inkluderat vår anpassade hjälparfil.

Så här är app / leverantörer / EnvatoServiceProvider.php filen ska ta hand om ändringar.

Så det är allt ganska bra hittills. Vi har vår specialhjälp och serviceleverantör på bordet.

Därefter måste vi informera Laravel om vår tjänsteleverantör så att den kan ladda den under bootstrapping. Låt oss öppna config / app.php och lägg till följande post i leverantörer array i slutet.

App \ Providers \ EnvatoServiceProvider :: klass,

För att kunna använda vår hjälpare på ett bekvämt sätt kan vi också skapa ett alias. Så låt oss göra det genom att lägga till följande post i alias array i slutet av samma fil.

'EnvatoUser' => App \ Helpers \ Envato \ User :: class,

Genom att definiera denna post kan vi ringa vår hjälpare genom att använda EnvatoUser nyckelord. Ganska bekvämt, va? För din referens, här är det fullständiga config / app.php fil.

 "Laravel", / * | ------------------------------------------- ------------------------------- | Applikationsmiljö | ----------------------------------------------- --------------------------- | | Detta värde bestämmer "miljön" din ansökan är för närvarande | körs in. Det här kan avgöra hur du föredrar att konfigurera olika | tjänster som din ansökan använder. Ange detta i din ".env" -fil. | * / 'env' => env ('APP_ENV', 'produktion'), / * | ----------------------------- --------------------------------------------- | Program Debug Mode | ---------------------------------------------- ---------------------------- | | När din ansökan är i debug-läge, detaljerade felmeddelanden med | stapelspår kommer att visas på alla fel som uppstår inom din | Ansökan. Om den är inaktiverad visas en enkel generisk fel sida. | * / 'debug' => env ('APP_DEBUG', felaktigt), / * | ------------------------------- ------------------------------------------- | Applikationsadress | ----------------------------------------------- --------------------------- | | Den här webbadressen används av konsolen för att generera webbadresser korrekt när du använder | det Artisan kommandoradsverktyget. Du borde ställa detta till roten till | din ansökan så att den används när du kör artisan-uppgifter. | * / 'url' => env ('APP_URL', 'http: // localhost'), / * | ------------------------- ------------------------------------------------- | Ansöknings tidzon | ----------------------------------------------- --------------------------- | | Här kan du ange standard tidssone för din ansökan, vilken | kommer att användas av PHP datum och datum-tid funktioner. Vi har gått | framåt och sätt detta till en förnuftig standard för dig ur lådan. | * / 'tidszon' => 'UTC', / * | ------------------------------------ -------------------------------------- | Applikationslandskonfiguration | ---------------------------------------------- ---------------------------- | | Applikationsplatsen bestämmer standardvalet som ska användas | av översättningstjänsten. Du kan ställa in det här värdet | till någon av de platser som kommer att stödjas av ansökan. | * / 'locale' => 'en', / * | ------------------------------------ -------------------------------------- | Ansökan Fallback Locale | ---------------------------------------------- ---------------------------- | | Fallback-localen bestämmer vilken plats som ska användas när den nuvarande | är inte tillgänglig. Du kan ändra värdet för att motsvara någon av | de språkmappar som tillhandahålls genom din ansökan. | * / 'fallback_locale' => 'en', / * | ------------------------------------ -------------------------------------- | Krypteringsnyckel | ----------------------------------------------- --------------------------- | | Denna nyckel används av Illuminate Encrypter-tjänsten och bör ställas in | till en slumpmässig, 32 teckensträng, annars dessa krypterade strängar | kommer inte vara säkert. Vänligen gör detta innan du sätter i en ansökan! | * / 'key' => env ('APP_KEY'), 'cipher' => 'AES-256-CBC', / * | -------------------- -------------------------------------------------- ---- | Logging Configuration | ----------------------------------------------- --------------------------- | | Här kan du konfigurera logginställningarna för din applikation. Av | rutan använder Laravel biblioteket Monolog PHP. Detta ger | du en mängd kraftfulla logghanterare / formater att använda. | | Tillgängliga inställningar: "singel", "dagligen", "syslog", "errorlog" | * / 'log' => env ('APP_LOG', 'single'), 'log_level' => env ('APP_LOG_LEVEL', 'debug'), / * | ------------- -------------------------------------------------- ----------- | Autoloaded Service Providers | ---------------------------------------------- ---------------------------- | | Tjänsteleverantörerna som listas här laddas automatiskt på | begäran till din ansökan. Lägg gärna dina egna tjänster till | denna array för att ge utökad funktionalitet till dina applikationer. | * / 'providers' => [/ * * Laravel Framework Service Providers ... * / Illuminate \ Auth \ AuthServiceProvider :: klass, belysa \ Broadcasting \ BroadcastServiceProvider :: klass, belysa \ Bus \ BusServiceProvider :: klass, belysa \ Cache \ CacheServiceProvider :: klass, belysa \ Foundation \ Providers \ ConsoleSupportServiceProvider :: klass, upplysa \ Cookie \ CookieServiceProvider :: klass, belysa \ Databas \ DatabasServiceProvider :: klass, belysa \ Kryptering \ EncryptionServiceProvider :: klass, belysa \ Filsystem \ FilesystemServiceProvider :: klass , Illuminate \ Foundation \ Providers \ FoundationServiceProvider :: klass, belysa \ Hashing \ HashServiceProvider :: klass, belysa \ Mail \ MailServiceProvider :: klass, belysa \ Notifieringar \ NotificationServiceProvider :: klass, belysa \ Pagination \ PaginationServiceProvider :: klass, belysa \ Pipeline \ PipelineServiceProvider :: klass, belysa \ Queue \ QueueServiceProvider :: klass, belysa \ Redis \ RedisServiceProvider :: klass, belysa \ Auth \ Lösenord \ PasswordResetServi ceProvider :: class, Illuminate \ Session \ SessionServiceProvider :: klass, belysa \ Översättning \ TranslationServiceProvider :: klass, belysa \ Validation \ ValidationServiceProvider :: klass, belysa \ Visa \ ViewServiceProvider :: klass, / * * Paketleverantörer ... * / Laravel \ Tinker \ TinkerServiceProvider :: klass, / * * Applikationsleverantörer ... * / App \ Providers \ AppServiceProvider :: klass, App \ Providers \ AuthServiceProvider :: klass, // App \ Providers \ BroadcastServiceProvider :: klass, App \ Providers \ EventServiceProvider :: klass, App \ Providers \ RouteServiceProvider :: klass, App \ Providers \ EnvatoServiceProvider :: klass,], / * | --------------------- -------------------------------------------------- --- | Klass Aliases | ----------------------------------------------- --------------------------- | | Denna grupp av klassalias kommer att registreras när denna ansökan | är igång. Det är dock gratis att registrera så många som du önskar som | aliaserna är "lata" laddade så att de inte hindrar prestanda. | * / 'aliases' => ['App' => Belysa \ Stöd \ Fasader \ App :: klass, 'Artisan' => Belysa \ Stöd \ Fasader \ Artisan :: klass, 'Auth' => Belysa \ Stöd \ Fasader \ Auth :: class, 'Blade' => Belysa \ Support \ Fasader \ Blade :: klass, 'Broadcast' => Belysa \ Support \ Fasader \ Broadcast :: klass, 'Bus' => Belysa \ Stöd \ Fasader \ Bus :: klass, 'Cache' => Belysa \ Stöd \ Fasader \ Cache :: klass, 'Config' => Belysa \ Stöd \ Fasader \ Config :: klass, 'Kaka' => Belysa \ Stöd \ Fasader \ Kaka :: klassen 'Crypt' => Belysa \ Stöd \ Fasader \ Crypt :: klass, 'DB' => Belysa \ Stöd \ Fasader \ DB :: klass, 'Eloquent' => Belysa \ Databas \ Eloquent \ Modell :: klass, 'Event' => Belysa \ Stöd \ Fasader \ Event :: klass, 'File' => Belysa \ Stöd \ Fasader \ Fil :: klass, 'Gate' => Belysa \ Stöd \ Fasader \ Gate :: klass, 'Hash 'Illuminate \ Support \ Facades \ Hash :: klass,' Lang '=> Belysa \ Stöd \ Fasader \ Lang :: klass,' Log '=> Belysa \ Stöd \ Fasader \ Log :: klass,' Mail '= > Belysa \ Stöd \ Fasader \ Mail :: klass, 'Nej tify '=> Belysa \ Stöd \ Fasader \ Meddelande :: klass,' Lösenord '=> Belysa \ Stöd \ Fasader \ Lösenord :: klass,' Queue '=> Belysa \ Stöd \ Fasader \ Queue :: klass,' Omdirigera ' = Belysa \ Stöd \ Fasader \ Omdirigera :: Klass, 'Redis' => Belysa \ Stöd \ Fasader \ Redis :: klass, 'Förfrågan' => Belysa \ Stöd \ Fasader \ Begäran :: klass, 'Svar' => Belysa \ Stöd \ Fasader \ Svar :: klass, 'Rutt' => Belysa \ Stöd \ Fasader \ Rutt :: klass, 'Schema' => Belysa \ Stöd \ Fasader \ Schema :: klass, 'Session' => Belysa \ Stöd \ Fasader \ Session :: klass, 'Förvaring' => Belysa \ Stöd \ Fasader \ Förvaring :: klass, 'URL' => Belysa \ Stöd \ Fasader \ URL :: klass, 'Validator' => Belysa \ Stöd \ Fasader \ Validator :: klass, 'Visa' => Belysa \ Stöd \ Fasader \ Visa :: klass, 'EnvatoUser' => App \ Helpers \ Envato \ User :: class,],];

Vi är nästan där! Vi har gjort allting hårt för att komma hit, och nu kan vi skörda fördelarna med vår anpassade hjälparbetare.

Din första anpassade hjälpen i åtgärd

Återigen, för att hålla sakerna enkla och raka, definierar vi en grundläggande Laravelrutt och ringer vår hjälpare därifrån!

Fortsätt och skapa en rutter / web.php fil med följande innehåll.

Behöver det någon förklaring alls? Vi har just kallade den anpassade hjälpen av stenografi EnvatoUser :: get_username, och det ska returnera användarnamnet.

Naturligtvis kan du ringa vår hjälpare från var som helst i ansökan, vare sig det är en kontroller eller vy.

Så det slutar vår historia för idag.

Slutsats

Hjälpare i Laravel är verkligen en kraftfull funktion, och jag är säker på att du som utvecklare skulle älska att förlänga det. Och det var ämnet idag - vi gick igenom grunderna i Laravel-hjälparfilstrukturen och skapade en användbar anpassad hjälpare.

Jag hoppas att du har haft den här artikeln och det hjälper dig att skapa egna anpassade hjälpmedel i den dagliga Laravel applikationsutvecklingen.

Tveka inte att lämna dina kommentarer och frågor i foderet nedan. Jag får också synpunkter på min Twitter och svarar på dem så snart jag kan!