11.01.20223 min

Paweł KamińskiSenior Fullstack DeveloperPolcode Sp. z o.o.

Co nowego pojawi się w Laravel 9.0?

Sprawdź, co nowego w Laravel 9.0, którego premiera w styczniu i kiedy możemy spodziewać się kolejnych aktualizacji.

Co nowego pojawi się w Laravel 9.0?

W kilku ostatnich latach Laravel stał się jednym z najpopularniejszych frameworków języka PHP. Nie jest to nic dziwnego, gdyż dzięki swojej budowie i funkcjonalnościom proces wytwarzania oprogramowania uczynił zwinnym i znacznie szybszym. Co więcej, jego stabilny i stały rozwój sprawia, że jest on wspaniałym wyborem podczas budowania różnej wielkości projektów, zarówno dla doświadczonych, jak i początkujących programistów.

Przyzwyczailiśmy się już, iż cyklicznie otrzymujemy nową wersję Laravela, wzbogaconą o szersze funkcjonalności i możliwości. Nie inaczej będzie w najbliższym czasie, gdy zostanie wydana wersja 9.0 frameworka. Uściślając, premiera pierwotnie zaplanowana na wrzesień 2021 roku została przeniesiona na styczeń 2022, głównie ze względu na liczne wykorzystywanie komponentów frameworka Symfony, którego to wersja 6.0 została wydana w listopadzie bieżącego roku.


Dzięki przeniesieniu premiery Laravela na styczeń, programiści zajmujący się jego rozwojem będą mieli okazję na dogłębne przetestowanie współpracy z komponentami Symfony, w tym naprawę wszelkich niekompatybilności. Ponadto ustalono, iż kolejne wersje będą wydawane zawsze w styczniu:

  • Laravel 9.0 - styczeń 2022,
  • Laravel 10.0 - styczeń 2023,
  • Laravel 11.0 - styczeń 2024


Wróćmy jednak do samego Laravela, gdzie dzięki przeciekom jak i oficjalnym komunikatom, możemy spróbować poznać proponowane przez autorów nowości i udoskonalenia.


Kompatybilność z wersjami PHP

W pierwszej kolejności na uwagę zasługuję fakt kompatybilności z wersjami PHP. Laravel w wersji 9.0 będzie działał wyłącznie z wersjami PHP 8.0 i wyższymi. Ograniczenie to po części rezultat wykorzystywania komponentów Symfony 6.0, które także nie współpracują ze starszymi wersjami interpretera PHP.


Anonimowe Migracje

W wersji 8.37 zapoczątkowano możliwość tworzenia migracji baz danych jako klasy anonimowe, co w idei miało zagwarantować brak konfliktów podczas tworzenia nowej bazy w sytuacji gdy istnieje kilka migracji opisanych za pomocą klas o tej samej nazwie.

Sposób realizacji anonimowych migracji przedstawia listing zaprezentowany poniżej:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
   /**
    * Run the migrations.
    *
    * @return void
    */public function up()
    {
      Schema::table('people', function (Blueprint $table)
      {
        $table->string(‘username’)->nullable();
      });
    }
};


Co warte zauważenia, taki sposób deklaracji migracji będzie teraz sposobem domyślnym.


Nowy interfejs Query Builder

Twórcy Laravela zauważyli, iż nierzadko programiści, budując zapytania poprzez Query Builder używają przy tym statycznej analizy kodu, czy też automatycznych podpowiedzi przez IDE. W przypadku omawianego Query Builder pewnym problemem był brak jednolitego interfejsu bądź dziedziczenia pomiędzy:

  • Query\Builder,
  • Eloquent\Builder
  • Eloquent\Relation.


W rezultacie może dochodzić do niejednoznacznych sytuacji, których przykład ilustruje poniższy listing:

return Model::query()
      ->whereNotExists(function($query) {
           // $query is a Query\Builder
      })
      ->whereHas('relation', function($query) {
          // $query is an Eloquent\Builder
      })
      ->with('relation', function($query) {
         // $query is an Eloquent\Relation
      });


Źródło: https://laravel-news.com/laravel-9

A które mogą powodować wystąpienie błędów typowania:

TypeError: Argument 1 passed to closure must be an instance of
Illuminate\Database\Eloquent\Builder, instance of
Illuminate\Database\Eloquent\Relations\HasMany given

W celu naprawy powstałego problemu twórcy proponują stworzenie całkiem nowego interfejsu:

Illuminate\Contracts\Database\QueryBuilder, który to jest implementowany przez bazową klasę Illuminate/Database/Query/Builder.php, a który odpowiada za budowanie zapytania, bez jego faktycznej wysyłki, której niezbędną częścią stanie się trait Illuminate/Database/Eloquent/Concerns/DecoratesQueryBuilder.php również stworzony od zera.


Funkcje tekstowe

W związku z całkowitym przejściem na PHP w wersji 8.0 twórcy postanowili wykorzystać jedną ze zmian, którą owa wersja ze sobą niesie. Mianowicie chodzi tu o wykorzystanie funkcji “str_contains()”, “str_starts_with()” i “str_ends_with()” w klasie “\Illuminate\Support\Str” frameworka.


Symfony Mailer

Kolejna z nowości to porzucenie przestarzałego już SwiftMailer na rzecz Symfony Mailer. Zmiana ta niesie za sobą kilka niekompatybilności, które dokładniej opisane zostały w oficjalnym Pull Request.

Do premiery nowej wersji Laravela pozostało już tylko kilka tygodni, kwestią czasu jest,byśmy poznali wszystkie jego możliwości. Tych z pewnością nie zabraknie, a twórcy na pewno zaskoczą nas jeszcze niejednymi zmianami i usprawnieniami.

By na bieżąco dowiadywać się o nowościach i rozwoju Laravela śledź nasze media społecznościowe, a z pewnością nic Cię nie ominie.

<p>Loading...</p>