Hvordan lage en Laravel Helper

Til å begynne med vil jeg heller la Laravel offisielle nettstedet snakke om hjelpere.

Laravel inneholder en rekke globale "hjelper" PHP-funksjoner. Mange av disse funksjonene brukes av selve rammen; Du er imidlertid fri til å bruke dem i dine egne applikasjoner hvis du finner dem praktiske.

Så, i utgangspunktet, hjelperne i Laravel er innebygde verktøyfunksjoner som du kan ringe fra hvor som helst i søknaden din. Hvis de ikke hadde blitt gitt av kjernevirksomheten, har du kanskje endte med å utvikle dine egne hjelperklasser.

Selv om kjernen gir en rekke hjelpere allerede, er det alltid en sjanse for at du trenger din egen og ønsker å utvikle en slik at du ikke trenger å gjenta den samme koden her og der, og dermed håndheve bedre vedlikeholdsevne. Du lærer hvordan du oppretter en tilpasset Laravel-hjelper i denne opplæringen.

Hjelpere i Laravel

Som vi diskuterte tidligere, er det mange hjelpere tilgjengelig i kjernen i Laravel-rammeverket. De er gruppert sammen basert på funksjonaliteten de gir. Her er en liste over hjelpegrupper.

arrays

Hjelperne i denne gruppen gir funksjonalitet til å manipulere arrayelementer. Oftere enn ikke, er du i situasjonen der du vil utføre forskjellige operasjoner på arrayelementer. Så dette er stedet du bør se først for å se om det du leter etter allerede eksisterer.

Paths

Jeg finner hjelpere i denne kategorien mest nyttige. De returnerer den fullt kvalifiserte banen til forskjellige kataloger som app, lagring, config og lignende. Jeg vedder på at du bruker de fleste av disse hjelperne allerede i Laravel-søknaden din.

Strings

Stringmanipulering er noe uunngåelig i din daglige applikasjonsutvikling. Selv om det er nok av strengmanipuleringsfunksjoner som tilbys av PHP selv, finner du noen flere nyttige godbiter i denne delen.

webadresser

Du finner svært få i denne kategorien, men de brukes i hele applikasjonen. De er vant til å generere rute-, aktiv- og skjemahandlingsadresser.

Diverse

Denne kategorien inneholder hjelpere som tilbyr en rekke funksjoner, alt fra logging til feilsøking og mange flere.

For en fullstendig referanse til Laravel-hjelpere er det ikke noe bedre sted enn den offisielle dokumentasjonen.

Opprett din første tilpassede hjelper

Nå har du en grunnleggende forståelse av Laravel-hjelpere og hva de brukes til. I denne delen vil jeg gå videre og demonstrere hvordan du kan lage din egen tilpassede hjelper som kan brukes globalt i Laravel-programmet.

For å holde ting enkelt og lett å forstå, vil det være en ganske grunnleggende hjelper som tar en userid og returnerer et brukernavn som svar. Selvfølgelig høres det ikke bra ut, men jeg tror det er nok å demonstrere konseptet, og du kan alltid utvide det for å oppfylle dine komplekse krav.

Jeg antar at du har en brukertabell i databasen din, og den har minst to felt-brukernavn og brukernavn.

Skeleton av en Laravel Helper

Før vi går videre og faktisk lager filene, la vi se på filene som vi skal lage i resten av artikkelen.

  • app / Hjelpere / Envato / User.php: Det er vår hjelpefil som holder logikken til vår hjelper.
  • app / Leverandører / EnvatoServiceProvider.php: Det er en egendefinert tjenesteleverandørfil som laster vår tilpassede hjelpefil.
  • config / app.php: I denne filen vil vi erklære vår tilpassede tjenesteleverandør, og det hjelper oss også med å definere et alias til vår hjelper, slik at vi ikke trenger å bruke det fullt kvalifiserte klassenavnet til vår hjelper.
  • ruter / web.php: En ganske vanlig Laravel-rutefil der vi faktisk skal teste vår hjelper.

Opprett hjelpeprogrammer

Selv om du kan plassere hjelpefilene dine hvor som helst i søknaden din, tyder den mer intuitive og vanlige måten at den skal gå under din app katalog.

Så gå videre og opprett en Hjelpere / Envato katalog under app og opprett en User.php fil med følgende innhold. Selvfølgelig kan du plassere den direkte under app eller app / Hjelpere katalog, men å gi det ekstra nivået gjør at vi kan organisere våre hjelpere i god form, spesielt når du skal få nok av dem.

hvor ('userid', $ user_id) -> første (); returnere (isset ($ user-> brukernavn)? $ bruker-> brukernavn: ");

Filen starter med en ganske standard navneområdedeklarasjon:

namespace App \ Helpers \ Envato;

Formålet med vår spesialtilpassede hjelper er å hente et brukernavn basert på en userid. Derfor må vi samhandle med databasen, og det tvinger oss til å inkludere DB Facade.

bruk Illuminate \ Support \ Facades \ DB;

For de som ikke er kjent med Laravel-fasader, er det bare en annen praktisk måte å få tilgang til gjenstandene i servicebeholdere. Alternativt kan du ha brukt avhengighetsinjeksjon.

Fortsett, det kommer den konkrete gjennomføringen av vår hjelper. Som du kan se, er det en statisk metode som definerer logikken for å hente et brukernavn basert på en userid.

$ user = DB :: table ('users') -> hvor ('userid', $ user_id) -> første ();

De $ user objekt holder databasen rekord med matchende userid. Endelig returnerer metoden brukernavnet som svar i følgende setning.

returnere (isset ($ user-> brukernavn)? $ bruker-> brukernavn: ");

Det er så langt som vår hjelperfil er bekymret.

Nå har vi opprettet vår hjelpefil, men spørsmålet er hvordan skal du bruke det? To raske løsninger kommer til meg:

  • Du kan inkludere vårt hjelpefilnavn i composer.json, slik at den blir automatisk lastet. Deretter kan du umiddelbart ringe den statiske metoden til vår hjelperklasse.
  • Du kan gå videre og opprette en Laravel-tjenesteleverandør som lar deg registrere din egendefinerte hjelpefil, slik at Laravel-rammeverket laster den sammen med andre avhengigheter. Registrer den tjenesteleverandøren i Laravel-konfigurasjonen og opprett et alias for å bruke hjelperen din.

Selvfølgelig er den første ganske rask og enkel å implementere, og du kan bli fristet til å gjøre det, men jeg vil helst foreslå den sistnevnte siden det ser ut som mer av en håndverker og er mer vedlikeholdsbar.

Flytt til kommandolinjen og kjør følgende kommando i programroten din for å opprette en ny tjenesteleverandør.

$ php artisan make: leverandør EnvatoServiceProvider Provider opprettet vellykket.

Du bør se meldingen som bekrefter at den er opprettet vellykket under app / Leverandører katalog.

Åpne den filen, og du bør allerede se to metoder der ute. Den viktigste i sammenheng med denne artikkelen er registrere metode. Ja, det er tomt for øyeblikket, så la oss mate i noen ting for å gjøre det mer nyttig.

offentlige funksjonsregister () require_once app_path (). '/Helpers/Envato/User.php'; 

Registermetoden brukes til å registrere dine avhengigheter, og vi har akkurat gjort det. Vi har tatt med vår tilpassede hjelpefil.

Her er hvordan app / Leverandører / EnvatoServiceProvider.php filen bør passe på modifikasjoner.

Så det er alt ganske bra så langt. Vi har vår tilpassede hjelper og tjenesteleverandør på bordet.

Deretter må vi informere Laravel om vår tjenesteleverandør slik at den kan laste den under bootstrapping. La oss åpne config / app.php og legg til følgende oppføring i tilbydere array på slutten.

App \ Providers \ EnvatoServiceProvider :: klasse,

For å bruke vår hjelper på en enkel måte, kan vi også opprette et alias. Så la oss gjøre det ved å legge til følgende oppføring i aliaser array på slutten i samme fil.

'EnvatoUser' => App \ Helpers \ Envato \ Bruker :: klasse,

Ved å definere denne oppføringen, kan vi ringe vår hjelper ved å bruke EnvatoUser søkeord. Ganske praktisk, va? For din referanse, her er komplett config / app.php fil.

 'Laravel', / * | ------------------------------------------- ------------------------------- | Applikasjonsmiljø | ----------------------------------------------- --------------------------- | | Denne verdien bestemmer "miljøet" din søknad er for øyeblikket | kjører inn. Dette kan avgjøre hvordan du foretrekker å konfigurere ulike | tjenester som søknaden din bruker. Sett dette i ".env" -filen din. | * / 'env' => env ('APP_ENV', 'produksjon'), / * | ----------------------------- --------------------------------------------- | Program Feilsøkingsmodus | ---------------------------------------------- ---------------------------- | | Når søknaden din er i feilsøkingsmodus, inneholder detaljerte feilmeldinger med | Stabelspor vil bli vist på hver feil som oppstår i din | applikasjon. Hvis deaktivert, vises en enkel generisk feilside. | * / 'debug' => env ('APP_DEBUG', falsk), / * | ------------------------------- ------------------------------------------- | Applikasjonsadresse | ----------------------------------------------- --------------------------- | | Denne nettadressen brukes av konsollen til å generere nettadresser riktig når du bruker | Artisan kommandolinje verktøyet. Du bør sette dette til roten til | din søknad slik at den brukes når du kjører artisan-oppgaver. | * / 'url' => env ('APP_URL', 'http: // localhost'), / * | ------------------------- ------------------------------------------------- | Applikasjonstidssone | ----------------------------------------------- --------------------------- | | Her kan du angi standard tidssone for programmet ditt, som | vil bli brukt av PHP dato og dato-time funksjoner. Vi har gått | fremover og sett dette til en fornuftig standard for deg ut av boksen. | * / 'timezone' => 'UTC', / * | ------------------------------------ -------------------------------------- | Søknadskonfigurasjonskonfigurasjon | ---------------------------------------------- ---------------------------- | | Applikasjonsstedet bestemmer standard locale som skal brukes | av oversettelsestjenesteleverandøren. Du er fri til å angi denne verdien | til noen av lokalene som vil bli støttet av søknaden. | * / 'locale' => 'no', / * | ------------------------------------ -------------------------------------- | Søknad Fallback Locale | ---------------------------------------------- ---------------------------- | | Fallback-lokaliteten bestemmer hvilken lokal som skal brukes når den nåværende | er ikke tilgjengelig. Du kan endre verdien for å korrespondere med noen av | språkmappene som er gitt gjennom søknaden din. | * / 'fallback_locale' => 'no', / * | ------------------------------------ -------------------------------------- | Krypteringsnøkkel | ----------------------------------------------- --------------------------- | | Denne nøkkelen brukes av Illuminate encrypter-tjenesten og skal settes | til en tilfeldig, 32 tegnstreng, ellers disse krypterte strenger | vil ikke være trygg. Vennligst gjør dette før du distribuerer et program! | * / 'key' => env ('APP_KEY'), 'cipher' => 'AES-256-CBC', / * | -------------------- -------------------------------------------------- ---- | Logging Configuration | ----------------------------------------------- --------------------------- | | Her kan du konfigurere logginnstillingene for søknaden din. Ut av | boksen, Laravel bruker Monolog PHP logging biblioteket. Dette gir | Du har en rekke kraftige loggbehandlere / formater for å utnytte. | | Tilgjengelige innstillinger: "single", "daily", "syslog", "errorlog" | * / 'log' => env ('APP_LOG', 'single'), 'log_level' => env ('APP_LOG_LEVEL', 'debug'), / * | ------------- -------------------------------------------------- ----------- | Autoloaded Service Providers | ---------------------------------------------- ---------------------------- | | Tjenesteleverandørene som er oppført her, lastes automatisk på | forespørsel til søknaden din. Ta gjerne med dine egne tjenester til | dette systemet gir utvidet funksjonalitet til dine applikasjoner. | * / 'providers' => [/ * * Laravel Framework Service Providers ... * / Illuminate \ Auth \ AuthServiceProvider :: klassen, lyser \ Broadcasting \ BroadcastServiceProvider :: klasse, lyser \ Bus \ BusServiceProvider :: klasse, lyser \ Cache \ CacheServiceProvider :: klasser, lyser \ Foundation \ Providers \ ConsoleSupportServiceProvider :: klassen, Lyser \ Cookie \ CookieServiceProvider :: klassen, Lyser \ Database \ DatabaseServiceProvider :: klassen, Lyser \ Kryptering \ KrypteringServiceProvider :: klasse, Lyser \ Filsystem \ FilesystemServiceProvider :: klasse , Illuminate \ Foundation \ Providers \ FoundationServiceProvider :: Klasse, Lys \ Hashing \ HashServiceProvider :: Klasse, Lys \ E-post \ MailServiceProvider :: Klasse, Lys \ Meldinger \ NotificationServiceProvider :: Klasse, Lys \ Paginering \ PaginationServiceProvider :: Klasse, Lys \ Pipeline \ PipelineServiceProvider :: Klasse, Lys \ Kjøre \ QueueServiceProvider :: Klasse, Lys \ Redis \ RedisServiceProvider :: Klasse, Lyser \ Auth \ Passord \ PasswordResetServi ceProvider :: class, Illuminate \ Session \ SessionServiceProvider :: klassen, lyser \ Oversettelse \ OversettelseServiceProvider :: klasse, lyser \ Validering \ ValidationServiceProvider :: klasse, Lyser \ Vis \ VisServiceProvider :: klasse, / * * Pakke Service Providers ... * / Laravel \ Tinker \ TinkerServiceProvider :: klasse, / * * Applikasjonsleverandører ... * / App \ Providers \ AppServiceProvider :: klasse, App \ Providers \ AuthServiceProvider :: klasse, // App \ Providers \ BroadcastServiceProvider :: klasse, App \ Providers \ EventServiceProvider :: klasse, App \ Providers \ RouteServiceProvider :: klasse, App \ Providers \ EnvatoServiceProvider :: klasse,], / * | --------------------- -------------------------------------------------- --- | Klassealaser | ----------------------------------------------- --------------------------- | | Denne gruppen av klassaliaser vil bli registrert når denne søknaden | er startet. Men vær så snill å registrere så mange du ønsker som | Aliasene er "lat" lastet slik at de ikke hindrer ytelsen. | * / 'aliases' => ['App' => Lyser \ Støtte \ Fasader \ App :: klasse, 'Artisan' => Illuminere \ Støtte \ Fasader \ Artisan :: klasse, 'Auth' => Illuminere \ Støtte \ Fasader \ Auth :: klasse, 'Blade' => Lyser \ Støtte \ Fasader \ Blade :: klasse, 'Broadcast' => Lyser \ Støtte \ Fasader \ Broadcast :: klasse, 'Bus' => Lys \ Støtte \ Fasader \ Bus :: klasse, 'Cache' => Lyser \ Støtte \ Fasader \ Cache :: klasse, 'Config' => Lyser \ Støtte \ Fasader \ Config :: klasse, 'Cookie' => Illuminere \ Støtte \ Fasader \ Cookie :: klasse, 'Crypt' => Lyser \ Støtte \ Fasader \ Crypt :: klasse, 'DB' => Lyser \ Støtte \ Fasader \ DB :: klasse, 'Eloquent' => Lyser \ Database \ Eloquent \ Modell :: klasse, 'Event' => Lyser \ Støtte \ Fasader \ Hendelse :: klasse, 'File' => Lyser \ Støtte \ Fasader \ Fil :: klasse, 'Gate' => Lys \ Støtte \ Fasader \ Gate :: klasse, 'Hash 'Illuminate \ Support \ Facades \ Hash :: klasse,' Lang '=> Lys \ Støtte \ Fasader \ Lang :: klasse,' Log '=> Lys \ Støtte \ Fasader \ Log :: klasse,' Mail '= > Lys \ Støtte \ Fasader \ Mail :: klasse, 'Nei tify '=> Illuminate \ Støtte \ Facader \ Notification :: klasse,' Passord '=> Lys \ Støtte \ Facader \ Passord :: klasse,' Queue '=> Lys \ Støtte \ Facader \ Queue :: class,' Omdirigere ' = Illuminere \ Støtte \ Fasader \ Omdirigere :: Klasse, 'Redis' => Lys \ Støtte \ Fasader \ Redis :: klasse, 'Forespørsel' => Lys \ Støtte \ Fasader \ Forespørsel :: klasse, 'Svar' => Lyser \ Støtte \ Fasader \ Reaks :: Klasse, 'Rute' => Lys \ Støtte \ Fasader \ Rute :: Klasse, 'Schema' => Lys \ Støtte \ Fasader \ Schema :: Klasse, 'Session' => Lyser \ Støtte \ Facader \ Session :: class, 'Storage' => Lyser \ Støtte \ Fasader \ Oppbevaring :: klasse, 'URL' => Lyser \ Støtte \ Fasader \ URL :: klasse, 'Validator' => Lyser \ Støtte \ Facader \ Validator :: class, 'View' => Lys \ Support \ Facader \ View :: klasse, 'EnvatoUser' => App \ Helpers \ Envato \ Bruker :: class,],];

Vi er nesten der! Vi har gjort alt hardt arbeid for å komme hit, og nå kan vi høste fordelene av vår tilpassede hjelper.

Din første tilpassede hjelper i gang

Igjen, for å holde ting enkelt og greit, skal vi definere en grunnleggende Laravel rute og ringe vår hjelper derfra!

Gå videre og opprett en ruter / web.php fil med følgende innhold.

Trenger det noen forklaring i det hele tatt? Vi har nettopp kalt den tilpassede hjelperen ved shorthand EnvatoUser :: get_username, og det skal returnere brukernavnet.

Selvfølgelig kan du ringe vår hjelper fra hvor som helst i søknaden, det være seg en kontroller eller visning.

Så det slutter vår historie for i dag.

Konklusjon

Hjelpere i Laravel er virkelig en kraftig funksjon, og jeg er sikker på at du som en utvikler vil elske å utvide det. Og det var temaet i dag - vi gikk gjennom grunnlinjen til Laravel Helper-filstrukturen og opprettet en nyttig tilpasset hjelper.

Jeg håper du har hatt glede av artikkelen, og det hjelper deg med å lage dine egne tilpassede hjelpere i den daglige Laravel applikasjonsutviklingen.

Ikke nøl med å legge igjen dine kommentarer og spørsmål i feedet under. Jeg fanger også kommentarer på min Twitter og svarer på dem så snart jeg kan!