Laravel 11: грядущие изменения и дата выхода
Оглавление
- Когда выйдет Laravel 11
- Как установить Laravel 11
- Что нового в Laravel 11: возможности и изменения
- Как внести свои функции и исправления ошибок в этот релиз
Laravel — мощный и гибкий PHP-фреймворк, завоевавший огромную популярность в мире веб-разработки.
Он предоставляет разработчикам богатый набор инструментов и функций, облегчающих создание надёжных и масштабируемых веб-приложений.
Когда выйдет Laravel 11
Согласно политике поддержки, выпуск Laravel 11 запланирован на 12 марта 2024 года.
Однако выход Laravel 11 не означает, что вы должны немедленно обновить все свои проекты.
Последний раз фреймворк получил LTS в шестой версии, но каждая основная версия включает два года обновлений, что должно дать достаточно времени для приведения кодовой базы в порядок и её обновления.
Laravel 10 будет получать исправления ошибок до 6 августа 2024 года, а исправления безопасности — до 4 февраля 2025 года.
Версия | PHP | Дата выхода | Исправления ошибок до | Исправления безопасности до |
---|---|---|---|---|
10 | 8.1 | 14 Февраля 2023 | 6 Августа 2024 | 4 Февраля 2025 |
11 | 8.1 | 12 марта 2024 | 5 Августа 2025 | 3 Февраля 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}
.
Вот более подробная информация об этих изменениях (это только верхушка айсберга):
- В
AuthServiceProvider
свойство$policies
было удалено, так как фреймворк обнаруживает их автоматически. - В
EventServiceProvider
отпала необходимость вSendEmailVerificationNotification
, поскольку его регистрирует базовыйEventServiceProvider
. Вы также заметите, что авто-обнаружение событий теперь включено по умолчанию. BroadcastServiceProvider
больше не нужен и был удалён. Фреймворк автоматически загружает файлroutes/channels.php
.RedirectIfAuthenticated
стал более простым благодаря основе во внутренностях фреймворка.- Middleware
Authenticate
больше не вызывает функциюredirectTo()
для JSON-маршрутов. Это устраняет ненужную тернарную проверку. - Из скелета были удалены middleware
EncryptCookies
,PreventRequestsDuringMaintenance.php
,TrimStrings
,TrustHosts
,TrustProxies
,ValidateCsrfToken
иValidateSignature
. - Пользовательские команды Artisan теперь загружаются автоматически. Консольному ядру не нужно вызывать метод
load()
. - Удалён файл
routes/console.php
. В ядре консоли можно регистрировать, основанные на замыкании, команды Artisan. - Некоторые миграции были объединены в один файл или просто удалены.
- Трейты
AuthorizesRequests
иValidatesRequests
были удалены из базового контроллера. - Файл
bootstrap/app.php
сократился всего до трёх строк кода. - Обработчик исключений был удалён.
Здесь представлен первоначальный 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:
- [11.x] Set up Laravel v11
- [11.x] Update Testbench dependencies for Laravel 11
- [11.x] Removed old WithoutEvents trait
- И многое другое!
Как внести свои функции и исправления ошибок в этот релиз
Знаете ли вы, что можете исправить возникшие ошибки или создать новую большую возможность для Laravel 11?
- Посмотрите, что происходит с Laravel 11 на GitHub: https://github.com/laravel/framework/pulls. Pull Request'ы подскажут, что уже сделано.
- Возьмите одну из ваших проблем с фреймворком и создайте решение самостоятельно.
- Отправьте PR в репозиторий laravel/framework, соберите отзывы, улучшите и добейтесь слияния.
Важный совет для повышения шансов на слияние: добавьте во фреймворк что-то, что будет полезно для разработчиков, но не доставит хлопот с поддержкой для Тейлора и его команды в долгосрочной перспективе.
Вот что нового появилось в Laravel 11 на данный момент.
Но до февраля 2024 года будет ещё больше.