Devloger

Laravel 5.6 | Nowości oraz Zmiany

Laravel 5.6 | Lista Zmian oraz Nowości

Laravel w wersji 5.6

Laravel 5.6 został oficjalnie wydany Emotikon uśmiechniętej buźki. 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 Emotikon uśmiechniętej buźki!

Laravel 5.6

Kontynuuje modernizację frameworka z wersji 5.5 poprzez dodanie bardzo wielu nowości, wszystkie zostaną tutaj opisane Emotikon uśmiechniętej buźki.

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 Emotikon uśmiechniętej buźki. W tym zmiana na boostrap 4 oczywiście Emotikon uśmiechniętej buźki.

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 Emotikon uśmiechniętej buźki!

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 Emotikon uśmiechniętej buźki. 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 Emotikon uśmiechniętej buźki. 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 Emotikon uśmiechniętej buźki.

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ę Emotikon uśmiechniętej buźki.

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 Emotikon uśmiechniętej buźki. 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 Emotikon uśmiechniętej buźki! 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 Emotikon uśmiechniętej buźki.

Kończąc

To już wszystko w dzisiejszym artykule Emotikon uśmiechniętej buźki. Aktualizujmy! Wyśmienita aktualizacja Emotikon uśmiechniętej buźki!

Zapraszam cię do lektury innych moich artykułów, komentowania oraz udostępniania Emotikon uśmiechniętej buźki.

A tym czasem życzę ci dobrego dnia, bywaj Emotikon uśmiechniętej buźki!

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!

2 komentarzy... przeczytaj komentarze albo dodaj nowy komentarz


Agafraz

2018-02-15

Krystianie. Widziałeś już Symfony 4 od Francuzów? Masz jakieś zdanie na temat Symfony w stosunku do Laravela?

Devloger

2018-02-16

Pamiętam dzień premiery Symfony 4. Miałem wtedy opanować ten framework w tej wersji, jednak jeszcze to nie nastąpiło :). Choć co nieco poszperałem, początkowe zagadnienia i tak dalej. Oraz różnice między wersją 3 a 4, co nowego... Co do mojego obecnego zdania, to... Symfony 4 jest na pewno ogromnie szybsze, wydajniejsze, mega zoptymalizowane. Laravel jest bardzo sprytnie pomyślany. Jednak w stosunku do Symfony użyłbym bardziej słowa precyzyjnie niż sprytnie. Był i jest dojrzalszy od Laravela. Bije go na bardzo wielu płaszczyznach, jest przemysłowy, idealny do dużych projektów, bardzo skalowalny i dużo lepiej pomyślany. Ale wiadomo, wszystko ma swoje wady i zalety. Nowa wersja symfony, to skondensowany rdzeń, dostarcza wszystko to co podstawowe (tak zostało to pomyślane w tej wersji). Resztę można sobie dopakować - wedle preferencji projektowych. Dla przykładu, w pamięci mi zostały niesamowite możliwości konfiguracyjne Symfony. Można to robić na tak wiele sposobów, w tak wielu formatach... Choćby sam routing. Który możemy konfigurować chociażby poprzez xml, yaml, php (config) czy adnotacje. Laravel jest niezwykle wygodny, przyjemny. Raczej Symfony go wygodą go nie przebije. Jednak Symfony również na tym polu stoi mocno. Mógłbym mówić i mówić, to strasznie obszerne zagadnienie a jeszcze nie znam w pełni Symfony 4 i jego możliwości. Byłoby łatwiej odnieść do bardziej specyficznego pytania. Jakoś odpowiedziałem, ale myślę, że to pytanie które zadałeś zasługuje na cały artykuł. Obszerny, porównujący, dotykający wszelkich wad i zalet, przewag. Coś w stylu innego mojego artykułu, dot. CodeIgnitera vs Laravel :). Z całą pewnością warto znać oba frameworki, oba są świetne. W jednej sytuacji lepszy może być Laravel, w innym Symfony, wiadomo.