I denne artikkelen vil vi gå gjennom en av de spennende funksjonene i Laravel web-rammeverk-oppgaveplanlegging. Gjennom hele denne artikkelen ser vi på hvordan Laravel lar deg administrere planlagte oppgaver i søknaden din. Videre vil vi også ende opp med å skape våre egne, skreddersydde oppgaver for demonstrasjonsformål.
Laravel-rammeverket lar deg sette opp planlagte oppgaver, slik at du ikke trenger å bekymre deg for å sette dem opp på systemnivå. Du kan kvitte deg med den komplekse cron-syntaksen mens du konfigurerer planlagte oppgaver, siden Laravel lar deg definere dem på en brukervennlig måte.
Vi starter artikkelen med hvordan du er vant til å sette opp tradisjonelle cron-jobber, og etter det vil vi utforske Laravel-måten å oppnå det på. I den siste halvdelen av artikkelen vil vi prøve det ved å lage noen skreddersydde planlagte oppgaver som skal gi et godt innblikk i emnet.
I din daglige applikasjonsutvikling står du ofte overfor en situasjon som krever at du utfører bestemte skript eller kommandoer med jevne mellomrom. Hvis du jobber med * nix-systemet, er du sannsynligvis klar over at cron-jobber håndterer disse kommandoene. På den annen side er de kjent som planlagte oppgaver på Windows-baserte systemer.
La oss få en rask titt på et enkelt eksempel på den * nix-baserte cron-jobben.
* / 5 * * * * /web/statistics.sh
Ganske enkelt-det kjører statistics.sh
filen hvert femte minutt!
Selv om det var en ganske enkel brukstilstand, befinner du deg ofte i en situasjon som krever at du implementerer mer komplekse brukstilfeller. På den annen side krever et komplekst system at du definerer flere cron-jobber som kjører ved forskjellige tidsintervaller.
La oss se noen oppgaver et komplekst webapplikasjon må utføre regelmessig i back-end.
Så, som du kan se, er det nok av ting der ute som venter på å bli kjøre regelmessig og også på forskjellige tidsintervaller. Hvis du er en erfaren systemadministrator, er det en kake tur for deg å definere cron jobber for alle disse oppgavene, men noen ganger ønsker vi som utviklere at det var en enklere måte rundt.
Heldigvis kommer Laravel med en innebygd Oppgaveplanlegging API som lar deg definere planlagte oppgaver som aldri før. Og ja, det neste avsnittet handler om det - grunnleggende om Laravel-oppgaveplanlegging.
I den tidligere delen gikk vi gjennom den tradisjonelle måten å sette opp cron-jobber. I denne delen går vi gjennom Larviks spesifikasjoner i sammenheng med Task Scheduling API.
Før vi går videre, er det viktig å forstå at planleggingsfunksjonen som Laravel tilbyr, er akkurat som hvilken som helst annen funksjon, og vil ikke bli påkalt automatisk. Så hvis du tenker at du ikke trenger å gjøre noe på systemnivå, så er du ute av lykke, vil jeg si.
Faktisk er det første du bør gjøre hvis du ønsker å bruke Laravel-planleggingssystemet, å sette opp cron-jobben som kjører hvert minutt, og kaller håndverkskommandoen som vises i følgende utdrag.
* * * * * php / path-to-your-project / artisan timeplan: kjør >> / dev / null 2> & 1
Ovennevnte artisan-kommandoen kaller Laravel-planleggeren, og som i sin tur utfører alle de pågående cron-jobbene som er definert i søknaden din.
Selvfølgelig er vi ennå å se hvordan du definerer de planlagte oppgavene i Laravel-søknaden din, og det er den aller neste tingen vi vil dykke inn i.
Det er rute
metode av App \ Console \ Kernel
klasse du må bruke hvis du ønsker å definere programspesifikke planlagte oppgaver.
Gå videre og ta tak i innholdet i app / Console / Kernel.php
fil.
kommando ( 'inspirasjon') -> time ();
Som du kan se, gir kjernekoden seg et nyttig eksempel. I eksempelet ovenfor kjører Laravel inspirere
håndverk kommando hver time. Synes du ikke at syntaksen er så intuitiv i utgangspunktet?
Faktisk er det et par forskjellige måter Laravel lar deg definere tidsplanoppgaver:
Videre er det nok av innebygde planleggingsfrekvenser du kan velge mellom:
Faktisk vil jeg si at den gir et komplett sett med rutiner, slik at du ikke trenger å røre skallet for å lage dine egendefinerte cron-jobber!
Ja, jeg kan fortelle at du er ivrig etter å vite hvordan du implementerer dine tilpassede planlagte oppgaver, og det er det jeg også lovet i begynnelsen av artikkelen.
Som vi diskuterte, er det forskjellige måter Laravel lar deg definere planlagte oppgaver på. La oss gå gjennom hver for å forstå hvordan det fungerer.
Planleggings API gir anrop
metode som lar deg utføre en callable eller en lukkefunksjon. La oss revidere app / Console / Kernel.php
fil med følgende kode.
ring (funksjon () $ innlegg = DB :: tabell ('innlegg') -> velg ('user_id', DB :: raw ('count (*) som total_posts')) -> groupBy ('user_id') - > () user (er), $ post-> user_id) -> update (['total_posts' => $ post- > totalposter));) -> everyThirtyMinutes ();
Som du kan se, har vi passert lukkingsfunksjonen som det første argumentet til anrop
metode. Vi har også satt frekvensen til hvert 30. minutt, så det vil utføre lukkingsfunksjonen hvert 30. minutt!
I vårt eksempel teller vi de totale innleggene per bruker og oppdaterer statistikk tabellen tilsvarende.
Bortsett fra lukninger eller callables, kan du også planlegge en håndverkskommando som vil bli utført med bestemte intervaller. Faktisk bør det være den foretrukne tilnærmingen over nedleggelser, da det gir bedre kodeorganisasjon og gjenbrukbarhet på samme tid.
Gå videre og revidere innholdet i app / Console / Kernel.php
filen med følgende.
kommando ( "statistikk: bruks) -> everyThirtyMinutes (); / ** * Registrer lukkebaserte kommandoer for applikasjonen. * * @return void * / beskyttet funksjonskommandoer () krever base_path ('routes / console.php');
Det er kommando
Metode som du vil bruke hvis du ønsker å planlegge en håndverkskommando som vist i koden ovenfor. Du må passere håndverkskommandosignaturen som det første argumentet til kommando
metode.
Selvfølgelig må du også definere den tilsvarende håndverkskommandoen på app / Console / Kommandoer / UserStatistics.php
.
velg ('user_id', DB :: raw ('count (*) som total_posts')) -> groupBy ('user_id') -> get (); // oppdateringsstatistikk tabell foreach ($ innlegg som $ post) DB :: table ('users_statistics') -> hvor ('user_id', $ post-> user_id) -> update (['total_posts' => $ post- > TOTAL_POSTS]);
Vi kan si at metodene vi har diskutert hittil, var spesifikke for Laravel-programmet selv. Videre lar Laravel deg også å planlegge skallkommandoene, slik at du også kan kjøre eksterne applikasjoner.
La oss gå gjennom et raskt eksempel som viser hvordan du tar backup av databasen hver dag.
exec ("mysqldump -h $ host -u $ brukernavn -p $ password $ database") -> daglig () -> sendOutputTo ('/ backups / daily_backup.sql');
Det er tydelig fra koden du trenger å bruke exec
metode for planleggeren, og du må passere kommandoen du vil kjøre som første argument.
Bortsett fra det, har vi også brukt sendOutputTo
metode som lar deg samle utgangen av kommandoen. På den annen side er det en metode, emailOutputTo
, som lar deg sende ut innholdet til e-post!
Og det bringer oss til slutten av artikkelen. Faktisk har vi nettopp kløftet overflaten av Laravel Scheduling API, og den har mye å tilby i sin kitty.
I dag gikk vi gjennom oppgaveplanleggings-API-en i Laravel web-rammeverket. Det var fascinerende å se hvor enkelt det tillater deg å styre oppgaver som må kjøre regelmessig.
I begynnelsen av artikkelen diskuterte vi den tradisjonelle måten å sette opp planlagte oppgaver, og etter det introduserte vi Laravel-måten å gjøre det på. I den siste halvdelen av artikkelen gikk vi gjennom et par praktiske eksempler for å demonstrere oppgaveplanleggingskonsepter.
Jeg håper at du har hatt glede av artikkelen, og du burde føle deg tryggere om å sette opp planlagte oppgaver i Laravel. For de av dere som enten bare er i gang med Laravel eller ser ut til å utvide din kunnskap, nettsted eller søknad med utvidelser, har vi en rekke ting du kan studere i Envato Market.
Skulle noe dukke opp i tankene dine, la oss starte en samtale ved å bruke feedet under!