Laravel 6.x – nowa wersja wydana
Laravel jest jednym z najpopularniejszych framework-ów PHP. 3 września 2019 r. została wypuszczona jego 6 wersja, wprowadzająca kilka nowych usprawnień i poprawek.
Wersja 6.0 oznaczona jako LTS
Na początek warto wspomnieć, że szósta wersja Laravel-a jest oznaczona jako LTS czyli Long-Term Support. Oznacza to, że będzie wspierana przez następne 2 – 3 lata a ściślej mówiąc błędy będą poprawiane do 3 września 2021, natomiast poprawki dotyczące bezpieczeństwa będą wprowadzane do 3 września 2022. Ostatnią wersją oznaczoną jako LTS była 5.5, której wsparcie bezpieczeństwa jest planowane do 30 sierpnia 2020.
Poniższa tabelka przedstawia kolejne wersje frameworka Laravel wraz z datą wydania oraz datami wsparcia.
Job Middleware
Została wprowadzona funkcjonalność Job Middleware, umożliwiająca automatyczne uruchamianie kodu przed i po uruchomieniu zadania w kolejce. Zasada działania i sposób użycia jest bardzo podobne jak przy wykorzystywaniu dobrze znanych Route Middleware.
W celu dodania middleware-u do zadania, należy utworzyć w klasie zadania metodę middleware(), która zwraca tablicę obiektów middleware-ów.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
use App\Jobs\Middleware\MyCustomMiddleware; /** * Get the middleware the job should pass through. * * @return array */ public function middleware() { return [new MyCustomMiddleware]; } public function handle() { // handle the job } |
No i oczywiście należy napisać klasę zawierającą kod middleware dla zadania:
1 2 3 4 5 6 7 8 9 |
class MyCustomMiddleware { public function handle($job, $next) { // Do something... return $next($job); } } |
Istnieje również możliwość wskazania middleware-ów podczas dodawania zadań do kolejki:
1 |
MySuperJob::dispatch()->through([new MyCustomMiddleware]); |
Ulepszone odpowiedzi podczas autoryzacji użytkownika
Wprowadzona została metoda Gate::inspect, umożliwiająca odpowiedzi dla użytkownika podczas jego autoryzacji.
1 2 3 4 5 6 7 8 9 |
$response = Gate::inspect('view', $flight); if ($response->allowed()) { // User is authorized to view the flight... } if ($response->denied()) { echo $response->message(); } |
Lazy Collections
Dodatkowa funkcjonalność do kolekcji umożliwiająca łatwiejszą pracę z dużą ilością danych, bez obciążania pamięci. Została wprowadzona nowa metod cursor, dzięki której możemy pobierać np. modele z kolekcji jedna po drugiej a nie wszystkie na raz.
Zamiast pobrania wszystkich encji:
1 2 3 |
$articles = App\Article::all()->filter(function ($article) { return $article->id > 100; }); |
Możemy pobierać je jedna po drugiej:
1 2 3 4 5 6 7 |
$articles = App\Article::cursor()->filter(function ($article) { return $article->id > 100; }); foreach ($articles as $article) { echo $article->title; } |
Ulepszone wykonywanie podzapytań bazy danych
Zostało ulepszone dodawanie podzapytań w modelach Eloquent, ułatwiające wykonywanie bardziej skomplikowanych zapytań bazy danych. Najważniejszymi funkcjonalnościami jakie zostały dodane to możliwość pobierania danych z podzapytań oraz sortowania danych wg. podzapytań.
Więcej na ten temat można przeczytać tutaj: https://laravel-news.com/eloquent-subquery-enhancements
Przeniesienie niektórych funkcjonalności z framework-a do osobnych paczek Composer-a
Funkcje helper-ów str_… i array_… zostały usunięte z Laravel 6 i przeniesione do osobnej paczki Composer-a laravel/helpers.
1 2 3 |
composer require laravel/helpers |
Podobnie do osobnej paczki laravel/ui została przeniesiona funkcjonalność generowania struktury wybranego projektu front-end (np. Vue lub React).
1 2 3 |
composer require laravel/ui |
Pozostałe zmiany
Niektóre inne wprowadzone zmiany to:
- od nowej wersji Laravel-a popularna biblioteka Carbon 1.x, służąca do pracy z datami, przestaje być dalej wspierana na rzecz wersji 2.x.
- zmiana domyślnego klienta Redis z predis na phpredis
- umożliwienie zadeklarowania typu klucza głównego w modelu
- usunięcie wsparcia dla niektórych silników wysyłania wiadomości e-mail – mandrill i sparkpost
- zmiany niektórych metod Lang – Lang ::trans an Lang::get, Lang::transChoice na Lang::choice, zmiana metody Lang::getFromJson na Lang::get
- zmiana z Input::get na Request::input
- odświeżone zostało logo oraz zmieniona oficjalna strona laravel.com
- i inne …
Wersjonowanie semantyczne
Na koniec warto zaznaczyć, że od tej wersji Laravel będzie rozwijany zgodnie z dobrze znanym standardem wersjonowania semantycznego (semantic versionong). Kolejne wersje oznaczane będą za pomocą 3 liczb oznaczających ważność zmian oraz kompatybilność z poprzednią wersją, tzn. MAJOR.MINOR.PATCH, gdzie:
- MAJOR – zmiana znacząca, często niekompatybilną z poprzednimi wersjami
- MINOR – drobne zmiany, dodanie dodatkowej funkcjonalności, kompatybilne z poprzednimi wersjami
- PATCH – zazwyczaj poprawki i naprawa błędów
Zachęcam do zapoznania się z nową wersją Laravel-a. Więcej informacji można znaleźć w oficjalnej dokumentacji frameworka: