Twórcy Laravela zaprezentowali ostatnio najnowszą wersję tego frameworku – Laravel 9.
Wprowadziła ona wiele mniejszych i większych zmian. Poniżej znajdziesz kilka z nich.
Minimalna wersja PHP to 8.0
Zmiana minimalnej wersji PHP jest podyktowana aktualizacją komponentów Symfony z wersji 5 do wersji 6, która wymaga PHP 8.0.
Zastąpienie Swift Mailer przez Symfony Mailer
Biblioteka Swift Mailer po wielu latach przestała być utrzymywana, dlatego twórcy Laravela zdecydowali się zmienić ją na Symfony Mailer.
Przebudowanie strony debugowania
Strona debugowania Ignition stworzona przez Spatie została przebudowana od podstaw.
Usprawnienie wyświetlania listy endpointów w CLI
Po wpisaniu komendy php artisan route:list zobaczymy nowy sposób wyświetlania listy endpointów. Został on uproszczony oraz dodano kolory, dzięki czemu stał się on czytelniejszy.


Usprawnione akcesory / mutatory
W poprzednich wersjach Laravela jedynym sposobem tworzenia akcesorów i mutatorów było dodanie prefixu, tak jak w przykładzie poniżej:
public function getNameAttribute($value)
{
return strtoupper($value);
}
public function setNameAttribute($value)
{
$this->attributes['name'] = $value;
}
Nowa wersja Laravela umożliwia stworzenia akcesora i mutatora za pomocą jednej funkcji:
use Illuminate\Database\Eloquent\Casts\Attribute;
public function name(): Attribute
{
return new Attribute(
get: fn ($value) => strtoupper($value),
set: fn ($value) => $value,
);
}
Indeksy pełnotekstowe (ang. FULLTEXT index)
Nowe funkcjonalności zostały dodane do interfejsu bazy danych.
Tworząc kolumnę możemy utworzyć indeks tekstowy:
$table->text('name')->fullText();
Dodano także nową metodę whereFullText oraz orWhereFullText:
$users = DB::table('users')
->whereFullText('name', 'John')
->get();
Pokrycie kodu testami
Komenda artisan test otrzymała nową opcję –coverage, która umożliwia wyświetlenie pokrycia kodu testami
Dyrektywy @checked i @selected w Blade
W silniku szablonów Blade w Laravel 9 dodano dyrektywy @checked i @selected, które ułatwiają obsługę pól w formularzach.
<input type="checkbox"
name="active"
value="active"
@checked(old('active', $user->active)) />
<select name="version">
@foreach ($product->versions as $version)
<option value="{{ $version }}" @selected(old('version') == $version)>
{{ $version }}
</option>
@endforeach
</select>