Laravel 5.6 | Lista Zmian oraz Nowości
Laravel 5.6 został oficjalnie wydany . Bardzo ciekawa aktualizacja. Szczególnie fajny jest nowy startowy scaffolding bazujący na bootstrapie 4. A to tylko jedna rzecz którą wprowadza ta wersja !
Laravel 5.6
Kontynuuje modernizację frameworka z wersji 5.5 poprzez dodanie bardzo wielu nowości, wszystkie zostaną tutaj opisane .
Również wszystkie komponenty frameworka Symfony używane przez Laravela zostały zaktualizowane do wersji z Symfony ~4.0.
Co ciekawe, wydanie Laravela 5.6 pokrywa się z wydaniem Laravel Sparka 6.0. Jest to pierwsza główna aktualizacja Sparka od jego wydania. Warto się tym zainteresować, tam też zaszło sporo bardzo pozytywnych zmian . W tym zmiana na boostrap 4 oczywiście .
Bootstrap 4
Świetna nowinka. Od teraz cały startowy front-endowy scaffolding bazujący wcześniej na bootstrapie 3 został zaktualizowany do boostrapa 4. Cudnie !
Poprawione Logowanie
System logowania został mocno ulepszony. Cała konfiguracja loggingu jest teraz przechowywana w pliku konfiguracyjnym znajdującym się w config/logging.php.
Możesz teraz łatwo budować stosy logowania, które będą wysyłać wiadomości do wielu kanałów je obsługujących . Dla przykładu możesz dzięki temu sprawić, że wiadomości poziomu debug będą się zapisywały do logów systemowych, a te poziomu error będą wysyłane takimi kanałami jak mail czy slack . Przykład:
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['syslog', 'slack'],
],
],
Również łatwiejsza stała się teraz customizacja istniejących kanałów logowania dzięki wykorzystaniu nowo dodanej funkcjonalności "tap". Dla przykładu:
'single' => [
'driver' => 'single',
'tap' => [App\Logging\CustomizeFormatter::class],
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
],
Harmonogram Zadań na Pojedynczym Serwerze
Jeśli twoja aplikacja działa na wielu serwerach, to możesz teraz ograniczyć odłożone prace do wykonywanie wyłącznie na jednym serwerze. Po co? Wyobraź sobie, że masz zadanie które generuje raport w każdy piątek. A co jeśli masz włączony harmonogram na trzech różnych serwerach? Wtedy zadanie to zostanie wykonane trzy razy na trzech serwerach i będziesz miał trzy raporty! To usprawnienie pozwala zapobiec tego typu sytuacjom.
Świetna nowinka. Jednak aby ją wykorzystać twoja aplikacja musi koniecznie używać memcached lub redis jako sterownika cache'u. Dodatkowo wszystkie serwery muszą się komunikować z tym samym centralnym serwerem cache'u.
By zaznaczyć, że zadanie powinno wykonać się tylko na jednym serwerze należy użyć metody onOneServer przy definiowaniu zadania do wykonania w harmonogramie. Pierwszy serwer który odbierze zadanie zabezpieczy je przed ponownym wykonaniem na pozostałych serwerach. Przykład użycia:
$schedule->command('report:generate')
->fridays()
->at('17:00')
->onOneServer();
Dynamiczne Ograniczenie Przepustowości
W Laravelu 5.6 możesz dynamicznie ustawić limit maksymalnej ilości zapytań na podstawie atrybutu w modelu User (po autentykacji). Jest to atrybut o nazwanie rate_limit który możesz przekazać do middleware'a o nazwie throttle. Dzięki temu będzie mógł on obliczyć maksymalną ilość możliwych zapytań. Przykład:
Route::middleware('auth:api', 'throttle:rate_limit,1')->group(function () {
Route::get('/user', function () {
//
});
});
Nowe Klasy Kanałów Broadcast
Jeśli masz bardzo wiele kanałów broadcastu w swojej aplikacji, to twój plik routes/channels.php może być zbyt niewygodny, masywny. Dlatego zamiast używać funkcji anonimowych by dokonać autoryzacji kanałów warto skorzystać z dedykowanych do tego klas kanałów. Do generowania tych klas służy nowa komenda artisana make:channel. Wszystkie tego typu klasy zostaną umieszczone w App/Broadcasting.
Następnie wystarczy zarejestrować kanał w routes/channels.php. Dla przykładu:
use App\Broadcasting\OrderChannel;
Broadcast::channel('order.{order}', OrderChannel::class);
Wystarczy już tylko umieścić w tej klasie całą logikę związaną z autoryzacją w metodzie join. Metoda ta będzie miała w sobie tę samą logikę którą wcześniej umieściłbyś w funkcji anonimowej. Możesz oczywiście skorzystać z bindowania modelu do klasy kanału. Przykład:
<?php
namespace App\Broadcasting;
use App\User;
use App\Order;
class OrderChannel
{
/**
* Create a new channel instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Authenticate the user's access to the channel.
*
* @param \App\User $user
* @param \App\Order $order
* @return array|bool
*/
public function join(User $user, Order $order)
{
return $user->id === $order->user_id;
}
}
Generowanie Kontrolerów API
Teraz możesz generować kontrolery dla API które będą RESTowe - ale nie będą zawierać metod które normalnie zwracały by widoki zawierające HTML. Dokonać tego możesz w bardzo prosty sposób, wystarczy przy tworzeniu kontrolera dodać flagę --api .
Poprawa Serializacji Modelów
Od teraz relacje które zostały załadowane w zakolejkowanym modelu zostaną automatycznie wczytane kiedy job zostanie przetworzony przez kolejkę .
Przetwarzanie Dat w Eloquencie
Możesz teraz indywidualnie definiować format do którego daty zostaną sprowadzone w modelach Eloquenta. Wystarczy odpowiednio przyporządkować kolumny do pożądanych przez ciebie formatów. Formaty te będą użyte automatycznie przy serializacji modelu do tablicy oraz formatu JSON. Przykład:
protected $casts = [
'birthday' => 'date:Y-m-d',
'joined_at' => 'datetime:Y-m-d H:00',
];
Aliasy Komponentów Blade'a
Możesz teraz tworzyć aliasy do komponentów blade'a. Wyobraź sobie, że twój komponent jest położony w resources/views/components/alert.blade.php. Możesz teraz za pomocą metody component stworzyć do niego alias (z components.alert na alert). Przykład:
Blade::component('components.alert', 'alert');
Kiedy już to zrobisz, będziesz mógł odwołać się do niego za pomocą zdefiniowanego aliasu . Przykład:
@component('alert')
You are not allowed to access this resource!
@endcomponent
A jeśli komponent nie posiada dodatkowych slotów, możesz zrobić to nawet prościej ! Przykład:
@alert
You are not allowed to access this resource!
@endalert
Nowy Algorytm Haszowania Argon2
Jeśli tworzysz aplikacje z wykorzystaniem PHP w wersji 7.2.0+ będziesz mógł wykorzystać nowy algorytm haszowania Argon2 - który od tej wersji otrzymuje oficjalne wsparcie Laravela. Domyślny algorytm haszowania jest teraz ustawiany w pliku konfiguracyjnym config/hashing.php.
Metody UUID
W tej wersji wprowadzone zostały dwie nowe metody do generowania UUID. Są to Str::uuid oraz Str::orderedUuid. Ta druga metoda generuje się z timestampem. Metoda ta łatwiej współgra z indeksowaniem w bazach danych takich jak MySQL. Obie funkcje zwracają obiekt Uuid. Przykład:
use Illuminate\Support\Str;
return (string) Str::uuid();
return (string) Str::orderedUuid();
Pakiet Collision
Laravel w wersji 5.6 zawiera pakiet o nazwie Collision. Pakiet pozwala na bardzo ładne raportowanie błędów podczas interakcji z aplikacją Laravela z poziomu terminala.
Podsumowanie
Świetna aktualizacja frameworka. Nowa wersja jak widać powyżej wprowadza bardzo wiele świetnych ficzerów. Zachęcam do zapoznania się z instrukcją aktualizacji do wersji 5.6 .
Kończąc
To już wszystko w dzisiejszym artykule . Aktualizujmy! Wyśmienita aktualizacja !
Zapraszam cię do lektury innych moich artykułów, komentowania oraz udostępniania .
A tym czasem życzę ci dobrego dnia, bywaj !