Вышла новая версия Laravel 9.0

Дата публикации: 2022-02-08
Просмотры: 592

Вышла очередная версия Laravel 9.0.
Теперь минимальная необходимая версия PHP 8.0.
Данная версия содержат критические изменения. Несмотря на это всегда есть возможность обновиться с предыдущей версии на новую.

Вышла новая версия Laravel 9.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

Предыдущая статья:

Вышла новая версия Doctrine ORM 2.11

Следующая статья:

Вышла новая версия Symfony 6.1
Поделиться статьей:

Комментарии:

Авторизуйтесь, для того, чтобы оставить комментарий. Войти на сайт
Подписка на новости
Узнавайте о новых статьях первыми.
Профиль