Verdienen Sie Geld mit Ihren Tech-Blogs, Gadgets und Tipps

Mikä on Pipeline Laravelissa?

Huomautus: Seuraava artikkeli auttaa sinua: Mikä on Pipeline Laravelissa?

Joissakin tapauksissa projektiisi on ehkä tehtävä useita muutoksia ennen kuin se voidaan siirtää. Joskus voit tehdä nämä muutokset tietyllä logiikalla ja järjestyksessä. Tässä artikkelissa puhumme Laravelin putkistosta ja näytämme, kuinka voit tehdä sarjan korjauksia ja toimintoja ennen päätoiminnon suorittamista Laravelissa.

Mikä on putki Laravelissa?

Selvyyden vuoksi putkilinjan käsite voidaan määritellä seuraavasti.

Liukuhihna hyväksyy siirrettävän objektin, lähettää arvon kehittäjältä, soveltaa alueita pipeteiksi kutsutun luokan kautta, kun viimeinen putki suoritetaan ja poistuu. , Vasta tässä vaiheessa (silloin) lopputulos palautetaan sinulle.

Koko luokka on seuraava.

PHP nimiavaruus Illuminate \ Pipeline ; käyttää sulkemista; käytä RuntimeException -ohjelmaa; Käytä Illuminate\Http\Request; käytä Illuminate\Contracts\Container\Container; käytä Illuminate\Contracts\Support\Responsable ; Käytä Illuminate\Contracts\Pipeline\Pipeline nimellä PipelineContract; Pipeline-luokka toteuttaa PipelineContract { protected $ container ; suojattu $ kelvollinen ; suojattu $pipes= []; suojattu $method = ‘kahva’ ; public function __construct(Säilö $Säilö = null) { $Tämä -> Säiliö = $Säilö; } julkinen funktio lähetä ( $ kelvollinen ) { $ tämä -> kelvollinen = $ kelvollinen ; palauta $this ; } julkinen funktio kautta ( $Pipes ) { $This -> Pipes = is_array ( $Pipes )? $putket: func_get_args(); palauta $this ; } julkinen funktio kautta ($-metodi) {$tämä ->metodi = $metodi; palauta $this ; } public function then(Sulkea $Kohde) { $Pipeline = Array_Reduce(Array_Reverse($This -> Pipes), $This -> Carry(), $This -> PrepareDestination($Destination)); return $pipeline($this -> kelvollinen); } public function thenReturn () { return $ this -> then ( function ( $ passable ) { return $ passable ; }); } suojattu toiminto PrepareDestination (Sulkea $ Kohde) { Paluutoiminto ($ Passable) Käytä ($ Kohde) { Paluu $ Kohde ($ Passable); }; } suojattu toiminto Kanto () { Paluutoiminto ( $ Pino , $ Pipe ) { Paluutoiminto ( $ Päästettävä ) Käytä ( $ Pino , $ Pipe ) { if (on_soitava ( $ Pipe )) { Paluu $ Putki ( $ Päästettävä , $ Pino );if elseif (! is_object ( $ pipe )) {[ $ name , $ parameters ] = $this -> parsePipeString($pipe); $putki = $this -> getContainer() -> make ($nimi); $parametrit = array_merge ([ $ passable , $ stack ], $parametrit ); } else { $parametrit = [ $ passable , $ stack ]; } $Response = method_exists ($Pipe, $This -> Method)? $putki -> { $tämä -> menetelmä}(…$parametri): $putki(…$parametri); Palauttaako $response ilmentymän Responsablelta? $response -> toResponse($this -> getContainer() -> make(Request::class)): $response; }; }; } suojattu funktio parsePipeString ( $ pipe ) {[ $ name , $ parameters ] = array_pad(explode(‘:’, $pipe, 2), 2, []); if (on_string ( $Parameters )) Parametrit $Parameters = Explode ( ‘,’ , $Parameters ); } palata [ $ name , $ parameters ]; } suojattu toiminto getContainer () { if (! $ this -> container) { throw new RuntimeException ( ‘Säilön esiintymää ei ole välitetty liukuhihnalle.’ ); } return $this -> Container; } }

Pipeline-luokka tarjoaa yleisiä menetelmiä, joita voimme käyttää.

  • Toimitus Menetelmä on arvot, jotka lähetetään putkiluokkaan.
  • Ja läpi menetelmä, joka hyväksyy putken luokan tai luokat.
  • Via menetelmä, jonka syöte on Pipe-luokan metodi ja jonka koodi suoritetaan ja se on valinnainen.
  • Lopuksi tämä Sitten Suoritetaan menetelmä, joka hyväksyy funktion ja suorittaa putket.

Pipeline tarvitsee palvelusäiliön (Lue Service Container -artikkeli saadaksesi lisätietoja konseptista), koska Pipeline käyttää palvelusäilöä tämän ongelman ratkaisemiseen siirrettäessä sille objektia.

Yksi yleisimmistä esimerkkejä toiminnoista ovat väliohjelmistotoiminnot, jotka liittyvät käyttäjien pyyntöjen suodattamiseen. Esimerkiksi väliohjelmisto tarkistaa, vaaditaanko todennus Routeissa vai ei, ja tarkistaa, tarvitaanko sisäänkirjautumista ja todennusta ennen minkään toiminnon suorittamista, kun käyttäjä lähettää pyynnön Routelle.

Opi suorittamaan väliohjelmistoa luokassa Illuminate\Foundation\Http\Kernel.

Seuraava menetelmä käyttää väliohjelmistoa.

PHP-suojattu funktio sendRequestThroughRouter($pyyntö) { $this -> app->instance(‘request’, $request); Julkisivu::clearResolvedInstance(‘request’); $this -> Bootstrap(); paluu ( uusi putkisto ( $ tämä -> sovellus)) -> lähetä ( $ pyyntö ) -> kautta ( $ tämä -> sovellus-> ShouldSkipMiddleware ()? []: $ tämä -> väliohjelmisto) -> sitten ( $ tämä -> packetToRouter ()); }

Aloita Pipelinen käyttö Laravelissa

Liukuhihnan luomisen ensimmäisessä vaiheessa meidän on luotava siitä esiintymä. Voimme käyttää sovellusaputoimintoa lähettämällä siihen liukuhihnaluokan.

$tulos = app(\Illuminate\Pipeline\Pipeline::class);

Nyt voimme soveltaa edellä mainittuja putkistomenetelmiä, jotka selitän alla.

Lähetä esine Pipelinelle Laravelissa

Kuten yleisten liukuhihnamenetelmien luettelossa mainittiin, lähetysmenetelmä voi hyväksyä hyvän objektin ja lähettää sen haluttuun putken luokkaan. Lähetysmenetelmän syöte voi olla objektin esiintymä. Se voi olla esimerkiksi taulukko, merkkijono, kokoelma jne.

$tulos = app(\Illuminate\Pipeline\Pipeline::class) -> send(‘tämän pitäisi olla muotoiltu oikein’);

Muista, että objekti lähetetään osoitteella tai ns. viitteellä eikä sitä tarvitse tallentaa uuteen muuttujaan. Tämä koskee malleja, kokoelmia, Ja mitä tahansa, mitä voidaan valmistaa prototyyppinä.

Pipe luokka

Pipeline-luokan menetelmällä voimme määrittää, mihin luokkaan tämä objekti lähetetään, jotta sille voidaan suorittaa haluttu toiminto. Tämä menetelmä toteutetaan seuraavasti.

$tulos = app(\Illuminate\Pipeline\Pipeline::class) -> send(‘tämä tulee muotoilla oikein’) -> through(function($passable,$next){ return $seuraava(ucfirst($passable)) ; }, AddPunctuation :: luokka, uusi RemoveDoubleSpacing (), InvokableClassToRemoveDuplicatedWords :: luokka );

Through-menetelmä on putkilinjan tärkein osa. Syöttössä voimme lähettää joukon tämän menetelmän hyväksyttäviä elementtejä tai jopa määritellä syötteeseen funktion. Tämän funktion tuloa kutsutaan putkeksi.

Putket voivat olla seuraavat:

  • Palvelusäilöistä luotu luokka.
  • Valmistuminen tai kutsuttava luokka
  • Esimerkki esineestä

Pipe-luokassa täytyy olla menetelmä nimeltä “handle”, joka suorittaa tämän menetelmän koodin. Mutta voimme muuttaa tätä menetelmää tarvittaessa. Tutkimme tätä asiaa alla.

Pipe-luokan mukautettu menetelmä

Pipeline-luokassa on menetelmä, jonka kautta mainitsimme edellä. Tämä menetelmä ei ole pakollinen ja liukuhihnatoiminto suoritetaan oletusarvoisesti Pipe-luokan Handle-metodissa.

Voimme nimetä tämän menetelmän uudelleen ja määrittää sen toiselle menetelmälle Pipe-luokassa.

Olet esimerkiksi saattanut käyttää Handle-menetelmää toisen toiminnon suorittamiseen ja haluat nyt suorittaa toisen toiminnon samalle luokalle.

$result = app (\Illuminate\Pipeline\Pipeline::class) -> lähetä (‘tämän tulee olla oikein muotoiltu’) -> kautta ([…]) -> via ( ‘modifyString’ );

Putkilinja johtaa Laraveliin

Viimeinen vaihe on liukuhihnan Suorittaminen, joka suoritetaan then- tai thenReturn-menetelmällä. Itse liukuhihna on lepotilassa, kunnes tämä menetelmä suoritetaan.

Sitten-menetelmä vastaanottaa paketin (Closure) ja tässä menetelmässä syötetty funktio on viimeisen suoritetun putken tulos. Jos esimerkiksi lisäämme tekstiä kahteen putkeen rumien sanojen Poistamiseksi ja komentosarjatunnisteiden poistamiseksi, funktion syöte then-metodissa on viimeisen putken tulos, eli teksti ilman rumia sanoja ja komentosarjatunnisteita.

Voit myös käyttää thenReturn-menetelmää. Tämä menetelmä palauttaa vain liukuhihnaputkien viimeisen tuloksen ja viimeistelee liukuhihnan.

Tämä menetelmä ei hyväksy mitään syötettä.

$result = app (\Illuminate\Pipeline\Pipeline::class) -> send (‘tämä tulee muotoilla oikein’ ) -> kautta (…) -> via (‘modifyString’) -> thenReturn ();

php-sovellus (Pipeline :: luokka) -> lähetä ( $ sisältö ) -> kautta ( $ Pipes ) -> then ( function ( $ sisältö ) { return Viesti :: luo ([ ‘content’ => $ content ]); });

Pipelinen käyttöönotto Laravelissa yksinkertaisella esimerkillä

Oletetaan, että olemme perustamassa foorumia ja haluamme, että seuraavat kolme asiaa tehdään postauksen yhteydessä.

  • Linkkitunnisteet tulee kirjoittaa normaalisti
  • Kirjoita huonot sanat *.
  • Poista komentosarjatunniste kokonaan tekstistä.

Tätä varten meidän on määritettävä kolme luokkaa kunkin yllä olevan toiminnon suorittamiseksi. Joten meidän putket näyttävät tältä.

$putket = [RemoveBadWords :: classReplaceLinkTags :: classRemoveScriptTags :: class];

Jokainen yllä olevista luokista suorittaa yhden mainituista toiminnoista.

Seuraavaksi menetelmän, jonka on tarkoitus tallentaa ja tallentaa haluttu sisältö, on ensin kutsuttava liukuhihna suorittamaan yllä mainitut toiminnot sisällön rungolle, ja sitten sisältö voidaan tallentaa. Esimerkiksi rekisteröintikoodi on seuraava.

PHP julkinen toiminto luo (pyyntö $pyyntö) { $pipes = [
RemoveBadWords :: class,
ReplaceLinkTags :: class,
RemoveScriptTags :: class
]; $ viesti = sovellus (Pipeline :: luokka) -> lähetä ( $ pyyntö -> sisältö) -> kautta ( $ Pipes ) -> then ( function ( $ content ) { return Viesti :: luo ([ ‘content’ => ‘content’ ]); }); }

Sitten-menetelmässä kutsutun funktion palautusarvo näkyy aina post-muuttujassa.

Pipeline-luokan ja Through-menetelmän syötteeseen voidaan lähettää joukko pipettejä.

Pipeline-luokka suorittaa operaatioita putkille Through-metodin sisääntulossa kahvaksi kutsutun menetelmän kautta. Jokainen putken luokka tarvitsee menetelmän nimeltä Hand suorittaakseen koodinsa liukuhihnassa.

Putkiluokille olisi hyvä luoda käyttöliittymä, joka tekee Handle-metodista pakollisen.

PHP-nimiavaruussovellus; käyttää sulkemista; käyttöliittymä Putki { julkinen toimintokahva($sisältö,Sulje$seuraava); }

Sen jälkeen määrittelemiemme luokkien tulee seurata tätä rajapintaa, eikä toteutusta saa unohtaa.

Esimerkiksi RemoveBadWord-luokka näyttäisi tältä:

PHP-nimiavaruussovellus; käyttää sulkemista; luokka RemoveBadWords toteuttaa Pipe { julkisen funktion kahva ( $sisältö , sulkeminen $seuraava ) { return $seuraava ( $sisältö ); } }

Handle-menetelmässä on kaksi tuloa. Ensimmäisen syötteen on oltava hyvä objekti ja toinen on paketti, johon objekti lähetetään putken välittämisen jälkeen.

Nyt voit kirjoittaa kaikki putket haluamallasi tavalla.

Kahva-menetelmän lisäksi voit käyttää myös toista menetelmää Pipe-luokassa.

php-sovellus (Pipeline :: luokka) -> lähetä ( $ sisältö ) -> kautta ( $ Pipes ) -> kautta ( ‘customMethodName’) -> then ( function ( $ content ) { return Viesti :: luo ([ ‘content’ => $ content ]); });

Metodin avulla voit syöttää putkiluokassa käytettävän menetelmän nimen.

Diplomi:

Tässä artikkelissa puhuimme Laravelin ominaisuudesta nimeltä Pipeline, josta harvat tietävät ja jota ei ole vielä edes dokumentoitu. Pipeline mahdollistaa elementtien muuttamisen tarpeen mukaan. Sinun on esimerkiksi tehtävä sarja korjauksia tekstiin ennen sen tallentamista ja sitten tallentamista. Putkilinja mahdollistaa tämän. Tutkimme kaikkia Pipeline-luokan menetelmiä ja sanoimme, että voit määrittää liukuhihnan luomalla Pipeline-luokan ja useita Pipeline-luokkia, ja sitten selitimme esimerkin avulla, kuinka Pipeline-luokkaa käytetään. Jos sinulla on kysyttävää tai kokemuksia Pipelinesta Laravelissa, jaa ne kanssamme SunLearnissä.

Sisällysluettelo