Laravel 9 - czego możemy się spodziewać

Laravel 9.0 - czego możemy się spodziewać

Paweł Kamiński - Senior Full Stack Developer
5 minutes read

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: https://github.com/laravel/framework/pull/38481

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.

On-demand webinar: Moving Forward From Legacy Systems

We’ll walk you through how to think about an upgrade, refactor, or migration project to your codebase. By the end of this webinar, you’ll have a step-by-step plan to move away from the legacy system.

Watch recording
moving forward from legacy systems - webinar

Latest blog posts

See more

Ready to talk about your project?

1.

Tell us more

Fill out a quick form describing your needs. You can always add details later on and we’ll reply within a day!

2.

Strategic Planning

We go through recommended tools, technologies and frameworks that best fit the challenges you face.

3.

Workshop Kickoff

Once we arrange the formalities, you can meet your Polcode team members and we’ll begin developing your next project.