Technologiczne, Gadżety, Telefony Komórkowe, Pobieranie Aplikacji!

Co to jest potok w laravel?

W niektórych przypadkach przed przeniesieniem może być konieczne wprowadzenie kilku zmian w projekcie. Czasami możesz wprowadzić te zmiany, zachowując pewną logikę i porządek. W tym artykule porozmawiamy o potoku w Laravel i pokażemy, jak wprowadzić serię poprawek i operacji przed wykonaniem głównej operacji w Laravel.

Co to jest potok w Laravel?

Dla wyjaśnienia, pojęcie rurociągu można zdefiniować w następujący sposób.

Potok przyjmuje akceptowalny obiekt, wysyła pewną wartość przez programistę, stosuje regiony poprzez klasę zwaną pipetami, kiedy ostatni potok zostanie wykonany i ukończony. , Dopiero w tym momencie (wtedy) zwracany jest Ci wynik końcowy.

Pełna klasa wygląda następująco.

kontener = $kontener; } / ** * Ustawia obiekt przesyłany potokiem. * * @param mieszane $ zadowalające * @return $ this * / funkcja publiczna send ( $ zadowalająca ) { $ this -> zadowalająca = $ zadowalająca ; zwróć $ to; } / ** * Ustawia szyk potoków. * * Tablica @param | mieszane $ potoki * @return $ to * / funkcja publiczna przez ( $ potoki ) { $ to -> potoki = is_array ( $ potoki )? $ potoki: func_get_args (); zwróć $ to; } / ** * Ustaw metodę wywoływania potoków. * * @param string $ metoda * @return $ this * / funkcja publiczna poprzez ( $ metoda ) { $ this -> metoda = $ metoda ; zwróć $ to; } / ** * Uruchom potok z wywołaniem zwrotnym końcowego miejsca docelowego. * * @param \ Zamknięcie $ miejsce docelowe * @return mieszane * / funkcja public następnie ( Zamknięcie $ miejsce docelowe ) { $ potok = array_reduce ( array_reverse ( $ to -> potoki), $ to -> carry (), $ to -> przygotowanieDestination ($miejsce docelowe)); return $ potok ( $ this -> zadowalający); } / ** * Uruchom potok i zwróć wynik. * * @return mieszany * / public funkcja thenReturn () { zwróć $ to -> następnie ( funkcja ( $ zadowalająca ) { zwróć $ zadowalająca ; }); } / ** * Zdobądź ostatni kawałek cebuli Zamknięcia. * * @param \ Zamknięcie $ miejsce docelowe * @return \ Zamknięcie * / chroniona funkcja przygotowanieDestination ( Zamknięcie $ miejsce docelowe ) { funkcja powrotu ( $ zadowalająca ) use ( $ miejsce docelowe ) { powrót $ miejsce docelowe ( $ zadowalająca ); }; } / ** * Uzyskaj zamknięcie reprezentujące wycinek aplikacji cebuli. * * @return \ Zamknięcie * / chroniona funkcja carry () { funkcja zwrotna ( $ stos , $ potok ) { funkcja zwrotna ( $ zadowalająca ) użycie ( $ stos , $ potok ) { if (is_callable ( $ potok )) { // Jeśli potok jest instancją zamknięcia, wywołamy go po prostu bezpośrednio, // w przeciwnym razie wyrzucimy potoki z kontenera i wywołamy je z // odpowiednią metodą i argumentami, zwracając wyniki. return $ potok ( $ zadowalający, $ stos);if elseif (! is_object ( $ potok)) {
[ $ name , $ parameters ] = $to -> parsePipeString( $potok); // Jeśli potok jest ciągiem znaków, przeanalizujemy ciąg i rozwiążemy klasę // z kontenera wstrzykiwania zależności. Następnie możemy zbudować wywoływalną funkcję i // wykonać funkcję potoku podając wymagane parametry. $ potok = $ to -> getContainer () -> make ( $ nazwa); $ parametry = array_merge ([ $ passable , $ stack ], $parametry ); } else { // Jeśli potok jest już obiektem, po prostu utworzymy obiekt wywołujący i przekażemy go // do potoku w niezmienionej postaci. Nie ma potrzeby wykonywania żadnego dodatkowego analizowania i formatowania, // ponieważ otrzymany obiekt był już obiektem w pełni utworzonym. $ parametry = [ $ passable , $ stack ]; } $ odpowiedź = metoda_istnieje ( $ potok , $ to -> metoda) ? $ potok -> { $ to -> metoda} (… $ parametry ): $ potok (… $ parametry ); return $ odpowiedź instancja Odpowiedzialny? $ odpowiedź -> toResponse ( $ this -> getContainer () -> make (Request :: class)): $ odpowiedź ; }; }; } / ** * Analizuj pełny ciąg potoku, aby uzyskać nazwę i parametry. * * @param string $ potok * @return tablica * / funkcja chroniona parsePipeString ( $ potok) {
[ $ name , $ parameters ] = array_pad (rozbij ( ‘:’, $ potok, 2), 2, []); if (is_string ( $parametry )) parametry $parametry = eksploduj ( ‘,’ , $ parametry ); } powrót [ $ name , $ parameters ]; } / ** * Pobierz instancję kontenera. * * @return \ Illuminate \ Contracts \ Container \ Container * * @throws \ RuntimeException * / chroniona funkcja getContainer () { if (! $ this -> kontener) { rzucaj nowy RuntimeException ( ‘Instancja kontenera nie została przekazana do Rurociąg.”); } zwróć $ to -> kontener; } }

Klasa Pipeline udostępnia ogólne metody, z którymi możemy pracować.

  • Wyślij metodą będą wartości wysyłane do klasy Pipe.
  • I przelot metoda, która akceptuje klasę lub klasy Pipe.
  • Przez metoda, której wejściem będzie metoda klasy Pipe i kod w tej metodzie zostanie wykonany i jest opcjonalny.
  • Wreszcie, Następnie zostanie uruchomiona metoda, która akceptuje funkcję i wykonuje Pipes.

Pipeline potrzebuje kontenera usług (przeczytaj artykuł dotyczący kontenera usług, aby dowiedzieć się więcej na temat tej koncepcji). Ponieważ Pipeline używa kontenera usług do rozwiązania tego problemu, gdy obiekt jest do niego przekazywany.

Jednym z najczęstszych przykładów operacji są operacje Middleware, które biorą udział w filtrowaniu żądań użytkowników. Na przykład oprogramowanie pośredniczące sprawdza, czy wymaga uwierzytelnienia w Routes, i sprawdza, czy musi się zalogować i uwierzytelnić przed wykonaniem jakiejkolwiek operacji, gdy użytkownik wysyła żądanie do Route.

Patrząc na klasę Illuminate \ Foundation \ Http \ Kernel, dowiesz się, jak uruchomić oprogramowanie pośrednie.

Poniższa metoda dotyczy uruchamiania oprogramowania pośredniego.

aplikacja-> instancja ( ‘request’, $ request ); Fasada :: clearResolvedInstance („żądanie”); $ to -> bootstrap (); return ( nowy potok ( $ this -> aplikacja)) -> wyślij ( $ request ) -> poprzez ( $ this -> app-> ShouldSkipMiddleware ()? []: $ this -> oprogramowanie pośrednie) -> następnie ( $ this -> shippingToRouter ()); }

Zacznij od Pipeline w Laravel

W pierwszym kroku tworzenia potoku musimy utworzyć jego instancję. Możemy użyć funkcji pomocnika aplikacji i wysłać do niej klasę Pipeline, aby to zrobić.

$ wynik = aplikacja (\ Illuminate \ Pipeline \ Pipeline :: class);

Teraz możemy zastosować metody potokowe wspomniane powyżej, które wyjaśnię poniżej.

Wyślij obiekt do Pipeline w Laravel

Jak wspomniano na liście ogólnych metod potoków, metoda send może zaakceptować dobry obiekt i wysłać go do żądanej klasy potoku. Dane wejściowe metody send mogą być instancją obiektu. Może to być na przykład tablica, ciąg znaków, kolekcja itp.

$ wynik = aplikacja (\ Illuminate \ Pipeline \ Pipeline :: class) -> send ( ‘to powinno być poprawnie sformatowane’);

Pamiętaj, że obiekt wysyłany jest z adresem czyli tzw. referencją i nie trzeba go zapisywać w nowej zmiennej. Dotyczy to modeli, kolekcji, I wszystko, co można prototypować.

Klasa rury

Korzystając z metody Through w klasie Pipeline możemy określić do której klasy ten obiekt ma zostać wysłany, aby można było na nim wykonać żądaną operację. Metodę tę implementuje się w następujący sposób.

$ wynik = aplikacja (\ Illuminate \ Pipeline \ Pipeline :: klasa) -> wyślij („to powinno być poprawnie sformatowane”) -> poprzez ( funkcja ( $ zadowalający , $ następny ) { return $ następny (ucfirst ( $ zadowalający )) ; }, AddPunstanding :: klasa, nowy RemoveDoubleSpacing (), InvokableClassToRemoveDuplicatedWords :: klasa );

Metoda przelotowa jest najważniejszą częścią rurociągu. Na jej wejściu możemy przesłać tablicę akceptowalnych elementów tej metody lub nawet zdefiniować funkcję na wejściu. Wejście tej funkcji nazywa się Pipe.

Rury mogą być następujące:

  • Klasa utworzona za pomocą kontenerów usług.
  • Klasa zamykająca lub wywoływalna
  • Przykład obiektu

W klasie Pipe musi istnieć metoda wywołana do obsługi, która wykona kod tej metody. Ale w razie potrzeby możemy zmienić tę metodę. W dalszej części przeanalizujemy tę kwestię.

Metoda niestandardowa klasy rur

W klasie Pipeline istnieje metoda o nazwie via, o której wspominaliśmy powyżej. Metoda ta nie jest obowiązkowa, a operacja potokowa domyślnie wykonywana jest w metodzie handle w klasie Pipe.

Możemy zmienić nazwę tej metody i przypisać ją do innej metody w klasie Pipe.

Na przykład mogłeś użyć metody handle do wykonania innej operacji, a teraz chcesz wykonać inną operację w tej samej klasie.

$ wynik = aplikacja (\ Illuminate \ Pipeline \ Pipeline :: klasa) -> wyślij („to powinno być poprawnie sformatowane”) -> poprzez ([

]) -> przez (‘modifyString’);

Wyniki potoku w Laravel

Ostatnim krokiem jest uruchomienie Pipeline, które jest uruchamiane za pomocą metody then lub thenReturn. Sam potok znajduje się w trybie uśpienia do czasu wykonania tej metody.

Metoda then odbiera pakiet (Closure), a wejście funkcji w tej metodzie jest wynikiem ostatniego wykonanego potoku. Przykładowo, gdy umieścimy tekst w dwóch potokach, aby usunąć brzydkie słowa i usunąć znaczniki skryptu, wejście funkcji w metodzie then będzie wynikiem ostatniego potoku, czyli tekstu bez brzydkich słów i znaczników skryptu.

Możesz także użyć metody thenReturn. Ta metoda zwraca tylko ostatni wynik Pipeline Pipes i kończy Pipeline.

Ta metoda nie wymaga wprowadzania danych.

$ wynik = aplikacja (\ Illuminate \ Pipeline \ Pipeline :: klasa) -> wyślij ( ‘to powinno być poprawnie sformatowane’ ) -> przez (…) -> przez ( ‘modifyString’ ) -> następnieReturn ();

wyślij ( $ zawartość ) -> przez ( $ potoki ) -> następnie ( funkcja ( $ zawartość ) { return Post :: utwórz ([ ‘content’ => $ content ]); });

Implementacja Pipeline w Laravel na prostym przykładzie

Załóżmy, że zakładamy forum i chcemy, aby podczas publikowania postów wykonano następujące trzy czynności.

  • Tagi linków należy pisać normalnie
  • Zapisz złe słowa jako *.
  • Usuń całkowicie znacznik skryptu z tekstu.

Aby to zrobić, musimy zdefiniować trzy klasy, aby wykonać każdą z powyższych operacji. Zatem nasze rury będą wyglądać następująco.

$ rury = [
RemoveBadWords :: class
ReplaceLinkTags :: class
RemoveScriptTags :: class
];

Każda z powyższych klas wykona jedną z wymienionych operacji.

Następnie metoda, która ma nagrać i zapisać żądaną treść, musi najpierw wywołać Pipeline, aby wykonać powyższe operacje na tekście treści, a następnie treść będzie mogła zostać zapisana. Na przykład kod rejestracyjny będzie następujący.

wyślij ( $ żądanie -> treść) -> przez ( $ potoki ) -> następnie ( funkcja ( $ zawartość ) { return Post :: utwórz ([ ‘content’ => ‘content’ ]); }); // zwróć dowolny typ odpowiedzi }

W zmiennej post wartość zwracana przez funkcję wywołaną w metodzie then zawsze będzie taka.

Na wejście klasy Pipeline i metodą przelotową można wysłać tablicę pipet.

Klasa Pipeline wykonuje operacje na potokach na wejściu metody przelotowej za pomocą metody zwanej uchwytem. Każda klasa Pipeline musi mieć metodę zwaną handlem, aby wykonać swój kod w Pipeline.

Dobrze byłoby stworzyć interfejs dla klas Pipe, który wymuszałby metodę handle.

Następnie zdefiniowane przez nas klasy muszą być zgodne z tym interfejsem i nie można zapomnieć o implementacjach.

Na przykład klasa RemoveBadWord wyglądałaby następująco:

Metoda uchwytu będzie miała dwa wejścia. Pierwszym wejściem musi być dobry obiekt, a drugim pakiet, do którego obiekt zostanie wysłany po potoku.

Teraz możesz pisać wszystkie swoje Pipes, jak chcesz.

Oprócz metody handle można zastosować także inną metodę w klasie Pipe.

wyślij ( $ zawartość ) -> przez ( $ potoki ) -> przez (‘customMethodName’) // <---- Ten :) -> następnie ( funkcja ( $ treść ) { wróć post :: utwórz ([ ‘content’ => $ content ]); });

Za pomocą metody możesz wpisać w klasie Pipe nazwę metody, którą chcesz nią operować.

Wniosek:

W tym artykule rozmawialiśmy o funkcji Laravela zwanej Pipeline, o której niewiele osób wie i która nawet nie została udokumentowana. Dzięki Pipeline możesz modyfikować elementy, jeśli zajdzie taka potrzeba. Na przykład musisz wprowadzić serię poprawek w tekście przed jego zapisaniem, a następnie zapisaniem. Rurociąg na to pozwala. Przeanalizowaliśmy wszystkie metody klasy Pipeline i stwierdziliśmy, że można skonfigurować Pipeline, tworząc jedną klasę Pipeline i kilka klas Pipeline, a następnie wyjaśniliśmy użycie Pipeline na przykładzie. Jeśli masz jakieś pytania lub doświadczenia dotyczące Pipeline w Laravel, podziel się nimi z nami w SunLearn.

Pobierz bezpłatne motywy WordPress PremiumPobierz bezpłatne motywy WordPress PremiumBezpłatne pobieranie motywów WordPressPobierz bezpłatne motywy WordPress Premiumpobierz płatny kurs Udemy za darmopobierz oprogramowanie redmiBezpłatne pobieranie motywów WordPresspobierz płatny kurs Udemy za darmo