Вышла новая версия Laravel 9.0
Вышла очередная версия Laravel 9.0.
Теперь минимальная необходимая версия PHP 8.0.
Данная версия содержат критические изменения. Несмотря на это всегда есть возможность обновиться с предыдущей версии на новую.
Symfony Mailer
Предыдущие выпуски Laravel использовали библиотеку Swift Mailer для отправки исходящей электронной почты. Однако эта библиотека больше не поддерживается, и ее заменил Symfony Mailer.
Flysystem 3.x
Компонент Flysystem обновлен до версии 3.x. Он предоставляет удобное взаимодействие с файловой системой. Используется Storage фасад.
Улучшенные Eloquent Accessors/Mutators
В предыдущих выпусках Laravel единственным способом определения аксессоров и мутаторов было определение префиксных методов в вашей модели следующим образом:
public function getNameAttribute($value)
{
return strtoupper($value);
}
public function setNameAttribute($value)
{
$this->attributes['name'] = $value;
}
В новой версии можно определить аксессор и мутатор, используя один метод без префикса, указывая тип возвращаемого типа Illuminate\Database\Eloquent\Casts\Attribute:
use Illuminate\Database\Eloquent\Casts\Attribute;
public function name(): Attribute
{
return new Attribute(
get: fn ($value) => strtoupper($value),
set: fn ($value) => $value,
);
}
Новый подход будет кэшировать значения объекта, возвращаемые атрибутом:
use App\Support\Address;
use Illuminate\Database\Eloquent\Casts\Attribute;
public function address(): Attribute
{
return new Attribute(
get: fn ($value, $attributes) => new Address(
$attributes['address_line_one'],
$attributes['address_line_two'],
),
set: fn (Address $value) => [
'address_line_one' => $value->lineOne,
'address_line_two' => $value->lineTwo,
],
);
}
Enum Eloquent приведение атрибутов
Эта возможность доступна только в версии PHP 8.1
Eloquent теперь позволяет вам приводить значения ваших атрибутов к Enums, поддерживаемым PHP.
Для этого вы можете указать атрибут и перечисление.
use App\Enums\ServerStatus;
/**
* The attributes that should be cast.
*
* @var array
*/
protected $casts = [
'status' => ServerStatus::class,
];
if ($server->status == ServerStatus::provisioned) {
$server->status = ServerStatus::ready;
$server->save();
}
Неявные привязки маршрутов с Enums
В PHP 8.1 появилась поддержка Enums. В Laravel 9.x появилась возможность указывать тип Enum в определении вашего маршрута, и Laravel будет вызывать маршрут только в том случае, если этот сегмент маршрута является допустимым значением Enum в URI. В противном случае ответ HTTP 404 будет возвращен автоматически.
enum Category: string
{
case Fruits = 'fruits';
case People = 'people';
}
Route::get('/categories/{category}', function (Category $category) {
return $category->value;
});
Определение области привязки маршрута
Теперь вы можете дать указание Laravel использовать область «дочерних» привязок, даже если пользовательский ключ не предоставлен. Для этого вы можете вызвать scopeBindingsметод при определении вашего маршрута:
use App\Models\Post;
use App\Models\User;
Route::get('/users/{user}/posts/{post}', function (User $user, Post $post) {
return $post;
})->scopeBindings();
Или вы можете указать всей группе определений маршрутов использовать привязки с областью действия:
Route::scopeBindings()->group(function () {
Route::get('/users/{user}/posts/{post}', function (User $user, Post $post) {
return $post;
});
});
Группы маршрутов контроллера
Теперь вы можете использовать этот controller метод для определения общего контроллера для всех маршрутов в группе. Затем при определении маршрутов вам нужно только указать метод контроллера, который они вызывают:
use App\Http\Controllers\OrderController;
Route::controller(OrderController::class)->group(function () {
Route::get('/orders/{id}', 'show');
Route::post('/orders', 'store');
});
Движок базы данных Laravel Scout
Если ваше приложение взаимодействует с базами данных малого и среднего размера или имеет небольшую рабочую нагрузку, теперь вы можете использовать механизм «базы данных» Scout вместо специальной службы поиска, такой как Algolia или MeiliSearch
Рендеринг встроенных шаблонов Blade
Вам может понадобиться преобразовать необработанную строку шаблона Blade в действительный HTML. Вы можете сделать это, используя render метод, предоставляемый Blade фасадом.
use Illuminate\Support\Facades\Blade;
return Blade::render('Hello, {{ $name }}', ['name' => 'Julian Bashir']);
use App\View\Components\HelloComponent;
return Blade::renderComponent(new HelloComponent('Julian Bashir'));
Bootstrap 5
Laravel теперь включает страницы, созданные с помощью Bootstrap 5.
use Illuminate\Pagination\Paginator;
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Paginator::useBootstrapFive();
}
Улучшенная поддержка IDE коллекций
Laravel 9.x добавляет улучшенные, «общие» определения типов стилей в компонент коллекций, улучшая поддержку IDE и статического анализа. IDE, такие как PHPStorm , или инструменты статического анализа, такие как PHPStan, теперь будут лучше понимать коллекции Laravel.
Ссылка на источник: https://laravel.com/docs/9.x/releases