Laravel 11: грядущие изменения и дата выхода

Источник: «Laravel 11: the big changes ahead and release date»
Laravel 11 будет выпущен 12 марта 2024 года. Его разработка продолжается до сих пор. Давайте рассмотрим все значимые новые возможности, о которых мы уже знаем.

Оглавление

Laravel — мощный и гибкий PHP-фреймворк, завоевавший огромную популярность в мире веб-разработки.

Он предоставляет разработчикам богатый набор инструментов и функций, облегчающих создание надёжных и масштабируемых веб-приложений.

Когда выйдет Laravel 11

Согласно политике поддержки, выпуск Laravel 11 запланирован на 12 марта 2024 года.

Однако выход Laravel 11 не означает, что вы должны немедленно обновить все свои проекты.

Последний раз фреймворк получил LTS в шестой версии, но каждая основная версия включает два года обновлений, что должно дать достаточно времени для приведения кодовой базы в порядок и её обновления.

Laravel 10 будет получать исправления ошибок до 6 августа 2024 года, а исправления безопасности — до 4 февраля 2025 года.

ВерсияPHPДата выходаИсправления ошибок доИсправления безопасности до
108.114 Февраля 20236 Августа 20244 Февраля 2025
118.112 марта 20245 Августа 20253 Февраля 2026

Как установить Laravel 11

Laravel 11 ещё не вышел. Поэтому вы должны использовать флаг --dev в официальном инсталляторе Laravel, который берет ветку main из репозитория laravel/laravel, всегда содержащего самый свежий код.

laravel new hello-world --dev

Или, если вы предпочитаете использовать Composer в явном виде:

composer create-project --prefer-dist laravel/laravel hello-world dev-master

Что нового в Laravel 11: возможности и изменения

Прекращение поддержки PHP 8.1

Когда выйдет Laravel 11, PHP 8.2 будет уже реализован, а PHP 8.3 также будет стабилен. Имея поддержку двух последних основных версий PHP, Laravel может двигаться вперёд и отказаться от 8.1.

Но помните: приложения Laravel необязательно обновлять до самых последних версий, как только они выходят.

Особенно если у вас есть проекты с платными клиентами или сотрудниками, которые зависят от них в своей работе.

Эти проекты должны медленно, но верно двигаться вперёд, проводя всестороннее тестирование. Не торопитесь.

См. pull request на GitHub: [11.x] Отказ от поддержки PHP 8.1

Встречайте более минималистичный скелет приложения

Laravel 11 поставляется с более компактным скелетом приложения. Идея заключается в том, что у вас должно быть меньше шаблонного кода, с которым придётся иметь дело, что должно помочь новичкам легче ориентироваться во фреймворке. И я не могу с этим не согласиться.

Если вы пропустили это, знайте, что все существующие приложения, обновлённые до Laravel 11, не должны переходить на новую структуру проекта. Это совершенно необязательно.

После установки Laravel 11 вас встретит ультраминималистичный скелет приложения, выглядящий следующим образом:

app
├── Http
│ └── Controllers
│ └── Controller.php
├── Models
│ └── User.php
└── Providers
└── AppServiceProvider.php
bootstrap
├── app.php
├── cache
│ ├── packages.php
│ └── services.php
└── providers.php

Исчезли папка: Console, app/Http/Middleware и config. Теперь вы регистрируете провайдеры в файле bootstrap/providers.php. Или вы можете использовать файлы конфигурации снова с помощью команды php artisan config:publish.

Файлы routes/channel.php, routes/console.php и routes/api.php также были удалены. Чтобы вернуть api.php и channel.php, выполните новую команду php artisan install:{api|broadcasting}.

Вот более подробная информация об этих изменениях (это только верхушка айсберга):

Здесь представлен первоначальный PR для Laravel 10 ([10.x] Slimmer Application Skeleton), который впоследствии был перенесён в Laravel 11. В нем вы найдёте ещё больше информации, что было изменено.

Появился новый удобный трейт Dumpable

Данный pull request вводит в Laravel 11 новый трейт Dumpable, призванный заменить существующие методы dd и dump в большинстве классов фреймворка.

Этот трейт позволяет пользователям Laravel и авторам пакетов легко включать отладочные методы в свои классы, используя его.

Приведём пример кода, показывающий, как это можно использовать:

<?php

namespace App\ValueObjects;

use Illuminate\Support\Traits\Dumpable;
use Illuminate\Support\Traits\Conditionable;

class Address
{
use Conditionable, Dumpable;

// ...
}

$address = new Address;

// До:
$address->foo()->bar();

// После:
$address->foo()->dd()->bar();

См. pull request на GitHub: [11.x] Adds Dumpable concern

Познакомьтесь с новым методом Model::casts()

Обычно в Laravel приведение атрибутов в модели Eloquent объявляется следующим образом:

class User extends Model
{
protected $casts = [
'email_verified_at' => 'datetime',
];
}

В Laravel 11 появилась возможность определять приведение через метод casts() в модели, что даёт возможность использовать статические методы класса, выполняющего приведение. Вот как это выглядит:

class User extends Model
{
protected function casts(): array
{
return [
'foo' => AsCollection::using(FooCollection::class),
];
}
}

Кроме того, теперь можно задавать приведения в виде массива:

class User extends Model
{
// Даже в старом свойстве $casts!
protected $casts = [
'foo' => [AsCollection::class, FooCollection::class],
];

protected function casts() : array
{
return [
'foo' => [AsCollection::class, FooCollection::class],
];
}
}

Обратите внимание, что метод casts() имеет больший приоритет, чем свойства $casts.

Все эти изменения являются не ломающими, то есть они не повлияют на ваш текущий код, если вы обновитесь до Laravel 11.

См. pull request на GitHub: [11.x] Adds Model::casts() method and named static methods for built-in casters

Подготовка к выпуску Laravel 11

Здесь приведён список всех найденных мной слияний PR для подготовки релиза Laravel 11:

Как внести свои функции и исправления ошибок в этот релиз

Знаете ли вы, что можете исправить возникшие ошибки или создать новую большую возможность для Laravel 11?

  1. Посмотрите, что происходит с Laravel 11 на GitHub: https://github.com/laravel/framework/pulls. Pull Request'ы подскажут, что уже сделано.
  2. Возьмите одну из ваших проблем с фреймворком и создайте решение самостоятельно.
  3. Отправьте PR в репозиторий laravel/framework, соберите отзывы, улучшите и добейтесь слияния.

Важный совет для повышения шансов на слияние: добавьте во фреймворк что-то, что будет полезно для разработчиков, но не доставит хлопот с поддержкой для Тейлора и его команды в долгосрочной перспективе.

Вот что нового появилось в Laravel 11 на данный момент.

Но до февраля 2024 года будет ещё больше.

Дополнительные материалы

Предыдущая Статья

12 лучших практик безопасности Laravel на 2023 год

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

PHP функция max()