Laravel 6 | Lista Zmian oraz Nowości
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 .
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 .
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 !
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 !
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!