Devloger

Laravel 6 | Nowości oraz Zmiany

Laravel 6 | Lista Zmian oraz Nowości

Obrazek - Laravel 6 - Logo

W dniu wczorajszym (03.09.2019) miała miejsce premiera zupełnie nowej wersji frameworka Laravel. Tym razem jest to Laravel 6. A co w nim nowego? Co się zmieniło? Semantyczne wersjonowanie, kompatybilność z Laravel Vapor, poprawione odpowiedzi autoryzacji, middleware do jobs, „lazy” kolekcje, usprawnienia podzapytań i wiele więcej… A dokładniej? Już omawiamy Emotikon uśmiechniętej buźki.

Laravel 6 – Nowy LTS

Laravel 6 jest nową wersją LTS (long term support), która będzie wspierana do 3 września 2021 roku. A w kwestii bezpieczeństwa do 3 września 2022 roku. Warto wspomnieć, że poprzednią wersją LTS był Laravel 5.5

Poprawione Wyjątki – Ignition

Laravel 6 wykorzystuje system Ignition – otwartą kodowo stronę zawierającą detale na temat wyjątków w aplikacji. Zalety? Poprawione obsługiwanie błędów Blade’a w plikach oraz lepsza kontrola numeru linii, uruchomieniowe rozwiązania dla typowych problemów, edycja kodu, dzielenie się wyjątkami (udostępnianie) oraz ogólnie lepsze UX.

Lazy Collections

Jest to wielka zmiana jeśli chodzi o pracę z obszernymi zbiorami danych w tym kolekcji danych z Eloquenta. Nowa klasa „Illuminate\Support\LazyCollection” wykorzystuje generatory języka PHP by utrzymać niskie zużycie pamięci podczas pracy z ogromnymi zbiorami danych.

Dla przykładu; wyobraź sobie, że twoja aplikacja potrzebuje przetworzyć log który ma wiele gigabajtów a jednocześnie wykorzystywać metody kolekcji Laravela do parsowania logów. Teraz zamiast czytać cały plik od razu dzięki leniwym kolekcjom możesz trzymać tylko małą porcję pliku w pamięci w danym czasie.

use App\LogEntry;

use Illuminate\Support\LazyCollection;



LazyCollection::make(function () {

    $handle = fopen('log.txt', 'r');



    while (($line = fgets($handle)) !== false) {

        yield $line;

    }

})

->chunk(4)

->map(function ($lines) {

    return LogEntry::fromLines($lines);

})

->each(function (LogEntry $logEntry) {

    // Process the log entry...

});

Lub wyobraź sobie, że musisz przeiterować 10.000 modeli Eloquenta. Używając tradycyjnych metod kolekcji wszystkie modele musiałyby zostać załadowane w tym samym czasie…

$users = App\User::all()->filter(function ($user) {

    return $user->id > 500;

});

Jednakże Laravel 6 posiada metodę „cursor” w query builderze, która teraz wykorzystuje leniwe kolekcje i zwraca instancję klasy LazyCollection. Pozwala to a przepuszczenie wciąż pojedynczego zapytania do bazy danych ale również trzymanie tylko jednego modelu Eloquenta w pamięci w danym czasie. Dla przykładu, metoda filter nie zostanie wykonana aż każdy user nie zostanie przeiterowany indywidualnie. Pozwala to na drastyczną redukcję zużycia pamięci.

$users = App\User::cursor()->filter(function ($user) {

    return $user->id > 500;

});



foreach ($users as $user) {

    echo $user->id;

}

Usprawnienia Podzapytań Eloquenta

Laravel 6 wprowadza wiele nowych usprawnień podzapytań dla bazy danych.

Dla przykładu powiedzmy, że mamy tabelę celów i tabelę lotów do nich. Tabela lotów posiada kolumnę arrived_at która mówi, kiedy lot przybył do danego celu.

Używając nowej funkcjonalności podzapytań, możemy wybrać wszystkie cele i nazwy lotów które niedawno do nich przybyły używając jednego zapytania.

return Destination::addSelect(['last_flight' => Flight::select('name')

    ->whereColumn('destination_id', 'destinations.id')

    ->orderBy('arrived_at', 'desc')

    ->limit(1)

])->get();

Dodatkowo możemy użyć nowej funkcji podzapytań dodanej do metody orderBy by posortować wszystkie cele na podstawie tego, kiedy miał miejsce ostatni przylot do celu. Znów – wszystko za pomocą jednego tylko zapytania.

return Destination::orderByDesc(

    Flight::select('arrived_at')

        ->whereColumn('destination_id', 'destinations.id')

        ->orderBy('arrived_at', 'desc')

        ->limit(1)

)->get();

Poprawione Odpowiedzi Autoryzacji

Poprzednio trudnym zadaniem było dodanie niestandardowych wiadomości o błędach wokół autoryzacji dla użytkowników. Laravel 6 wprowadza metodę Gate::inspect która udostępnia odpowiedź w ramach autoryzacji.

$response = Gate::inspect('view', $flight);



if ($response->allowed()) {

    // User is authorized to view the flight...

}



if ($response->denied()) {

    echo $response->message();

}

Job Middleware

Jest to nowa funkcja pozwalająca na uruchomienie mechanizmu job przez middleware.

// Add a middleware method to a job class

public function middleware()

{

     return [new SomeMiddleware];

}



// Specify middleware when dispatching a job

SomeJob::dispatch()->through([new SomeMiddleware]);

Middleware pomoże uniknąć niestandardowej logiki w metodzie handle() mechanizmu job.

Semantyczne Wersjonowanie

Pakiet laravel/framework będzie teraz rozwijany z zastosowaniem standardu semantycznego wersjonowania. Dzięki temu będzie on spójny z jego wykorzystywanymi pakietami które już stosują się do tego standardu. Mimo wszystko cykl wypuszczania kolejnych wersji frameworka pozostaje bez zmian Emotikon uśmiechniętej buźki.

Laravel UI

Strona frontendowa została teraz wyabstrahowana do pakietu laravel/ui. Pozwala to na niezależną pracę UI oraz frameworka Laravel.

Natomiast jeśli chciałbyś używać tradycyjnego szablonu Bootstrap/Vue użyj poniższych komend:

composer require laravel/ui

php artisan ui vue –auth

Kompatybilność z Laravel Vapor

Laravel 6 jest kompatybilny z Laravel Vapor, auto-skalującą i bez-serwerową platformą deploymentu dla Laravela. Vapor deleguje złożoność zarządzania aplikacją na AWS Lambda, a także łączenie tych aplikacji z kolejkami SQS, bazami danych, klastrami Redisa, sieciami, CDN i wiele więcej…

Nie ma co czekać…

Wpisz komendę „laravel new …”, pobaw się nową wersją Laravela i stwórz coś ekstra Emotikon uśmiechniętej buźki!

Kończąc

To już wszystko apropo nowej wersji Laravela. Laravel 6 w mojej opinii ma mniej efektu WOW. Lepiej było gdy wyszedł Laravel 5. Jednak wciąż jest super! Używajmy, korzystajmy Emotikon uśmiechniętej buźki!

A ja tym czasem dziękuję ci za lekturę oraz zapraszam do innych moich artykułów, najlepiej korzystając ze spisu treści który znajdziesz w menu głównym mojego bloga.

Wszystkiego dobrego!

Krystian Bogucki

Podobał Ci się ten artykuł?

Jeśli tak, to zarejestruj się aby otrzymywać powiadomienia o nowych artykułach. Nie ujawnię nikomu Twojego adresu!