Laravel уже довольно долгое время является одним из самых крупных PHP-фреймворков. Он адаптивен, масштабируем и универсален, благодаря чему стал практически незаменимой системой для инженеров и компаний, работающих с PHP. На подходе уже 9-я версия Laravel, несущая с собой целый ряд новых фич и решений. Laravel укореняется в позиции одного из ведущих PHP-фреймворков для создания амбициозных, надежных и кастомизированных веб-приложений, и это неудивительно.
Laravel всегда стремится сделать процесс разработки более плавным и быстрым, поэтому постоянно предлагает своим пользователям новые версии с новыми функциями, возможностями, усовершенствованиями и многим другим. Laravel уже успел пережить несколько крупных обновлений. Его возможности и функциональность настолько развились, что он стал ведущей PHP-системой для разработки веб-приложений.
Изначально релиз Laravel 9 планировался на сентябрь 2021 года, но был перенесен на январь 2022 года, что сделало его первым релизом с планом долгосрочной поддержки (LTS), согласно которому обновления будут происходить раз в год (а не 6 месяцев как было раньше). Давайте же обсудим новые фичи и обновления Laravel 9, которые были анонсированы на данный момент.
Чего стоит ожидать от Laravel 9?
Laravel 9, как утверждается, станет первым продуктом с долгосрочной поддержкой, обновляемым в соответствии с 12-месячным циклом релизов. Первоначально было объявлено, что он увидит свет в сентябре 2021 года. Однако затем было решено перенести релиз на январь 2022 года. Laravel имеет системные зависимости от множества библиотек, поддерживаемых сообществом и Symfony 9, а компания Symfony запланировала релиз Symfony 6.0 на ноябрю 2021 года, что в свою очередь заставило команду Laravel отложить выпуск Laravel 9. Чтобы обновить весь фреймворк Laravel до последней версии Symfony, потребуется немало времени, не говоря уже о тестировании и мониторинге всех изменений перед выпуском на рынок. Наконец, отсрочка релиза Laravel 9 до января 2022 года позволит команде Laravel выпускать последующие LTS ежегодно. По этой причине команда Laravel отложила релиз на 2 месяца после релиза Symfony. Теперь, когда вы знаете причины этой отсрочки, давайте познакомимся с новым Laravel 9 до его выхода 22 января 2022 года.
Новые фичи Laravel 9
Минимальные требования к PHP
Для установки Laravel 9 требуется самая современная версия PHP 8, PHPUnit 9 и ряд других обязательных требований, которые будут точно определены в ближайшем будущем. Laravel как фреймворк зависит от нескольких библиотек, поддерживаемых сообществом и Symfony 9. Поскольку Symfony планирует выпустить версию 6.0 к ноябрю 2021 года, это вынудило команду разработчиков Laravel отложить релиз Laravel 9. Требование PHP 8 связано с тем, что Laravel 9 зависит исключительно от последнего релиза Symfony 6.0, который в свою очередь зависит от PHP 8. Советую вам почитать про PHP-хостинг и новшества PHP 8, а также ознакомится со сравнением характеристик разных версий PHP, чтобы понять, в чем заключаются преимущества и особенности PHP 8, начиная с компилятора Just-In-Time (JIT) и заканчивая продвижением свойств конструкторов.
Анонимная миграция
Laravel введет анонимные миграции в качестве поведения по умолчанию при выполнении популярной команды migration:
php artisan make:migration
Анонимные миграции были впервые представлены в Laravel 8.37 для решения проблемы, возникающей с Github. Проблема заключается в том, что несколько миграций с одним и тем же именем могут вызвать проблемы при попытке воссоздать базу данных. Анонимные миграции устраняют коллизии имен классов миграции.
Новый интерфейс конструктора запросов
В Laravel 9 подсказки типов (type hinting) стали более надежными с точки зрения рефакторинга, анализа неиспользуемого кода и автодополнения при наборе в IDE. Это связано с необходимостью использования общего интерфейса и наследования между QueryBuilder, EloquentBuilder и EloquentRelation. Тем не менее, в Laravel 9 мы получим возможность воспользоваться новым интерфейсом конструктора запросов для подсказки типов, рефакторинга и статического анализа.
Строковые функции PHP 8
Так как Laravel 9 ориентирован на PHP 8, Laravel нацелен на использование наиболее актуальных строковых функций. Эти функции включают в себя использование str_contains(), str_starts_with() и str_ends_with() внутри класса IlluminateSupportStr. Перечисленные возможности и улучшения Laravel 9 — это лишь краткий обзор того, что нас ждет в будущем. В нем, несомненно, будут исправлены ошибки, добавлены новые возможности и, конечно же, произойдут многочисленные изменения.
Зачем переходить с Laravel 8 на 9
Flysystem 2.0
В Laravel 9.x осуществлен переход с Flysystem 1.x на 2.x. Под капотом Flysystem использует все методы работы с файлами, реализованные в фасаде Capacity. В связи с этим в вашем приложении могут потребоваться некоторые изменения. В любом случае, мы постарались сделать этот переход максимально плавным.
Symfony Mailer
Одним из самых значительных изменений в Laravel 9.x является переход от SwiftMailer, который перестал поддерживаться с декабря 2021 года, к Symfony Mailer. Однако Laravel постарался сделать этот переход для ваших приложений настолько плавным, насколько это возможно. Но несмотря на это, все-таки будет лучше, если бы вы ознакомились с приведенным ниже списком изменений, чтобы убедиться, что ваше приложение полностью соответствует ему.
Кастомные касты и null
В предыдущих версиях Laravel метод set кастомных кастов не вызывался, если для атрибута приведения было установлено значение null. Однако такое поведение не соответствовало документации Laravel. В Laravel 9.x метод set класса каста будет вызываться с null в аргументе
Дефолтный таймаут HTTP-клиента
В HTTP-клиенте теперь по умолчанию установлен тайм-аут в 30 секунд. Другими словами, если сервер не ответит в течение 30 секунд, то будет выброшено исключение. Раньше в HTTP-клиенте не было дефолтного таймаута, что приводило к тому, что запросы иногда "зависали" на неопределенное время. Если вы хотите задать более длительный таймаут для конкретного запроса, то это можно сделать с помощью метода timeout
:
" class="formula inline">response = Http::timeout(120)->get(...);
Каталог lang
В приложениях Laravel 9.x каталог resources/lang теперь располагается внутри корневого каталога проекта (lang). Если ваш пакет публикует языковые файлы в этот каталог, необходимо убедиться, что пакет публикует их в app()->langPath()
, а не по захардкоженному старому пути.
Правило Password
Правило password, проверяющее соответствие вводимого значения текущему паролю подтвержденного пользователя, было переименовано в current_password
.
Методы when/unless
Как вы, возможно, уже знаете, множество различных классов фреймворка предлагают методы when
и unless
. Эти методы могут быть использованы для условного выполнения действия, если логическое значение первого аргумента метода равно true
или false
:
$collection->when(true, function ($collection) {
$collection->merge([1, 2, 3]);
});
Поэтому в прошлых версиях Laravel передача замыкания в методы when или unless предполагала, что условная операция будет выполняться всегда, поскольку нечеткое сравнение с объектом замыкания всегда оценивается как true. Это часто приводило к неожиданным результатам, поскольку разработчики ожидают, что результат замыкания будет использоваться в качестве логического значения, определяющего, будет ли выполнено условное действие. Таким образом, в Laravel 9.x любые замыкания, переданные методам when или unless, будут выполнены, а значение, возвращенное замыканием, будет считаться логическим значением, используемым методами when и unless.
Отзывы инфлюэнсеров о Laravel 9
Мы обратились к нескольким известным членам сообщества и авторитетным пользователям Твиттера с просьбой поделиться своими впечатлениями от Laravel 9, и вот что они говорят по этому поводу:
Грэм Кэмбелл (Graham Cambell)
"Laravel 9 — это по большей части релиз, который позволит нам внести ряд критических изменений и перейти на компоненты Symfony 6, от Swift Mailer к Symfony Mailer, а также на Flysystem 2. Практически все новые фичи появились в Laravel 8, причем в течение последнего года новые фичи появлялись практически каждую неделю. Мы с Драйсом и многими другими коллегами усердно работали над тем, чтобы Laravel 8 и поддерживающие его пакеты работали на PHP 8.1, поэтому теперь нет необходимости ждать Laravel 9, чтобы перейти на PHP 8.1, что очень здорово".
Тейлор Отвелл (Taylor Otwell)
"По сравнению с предыдущими мажорными релизами Laravel, я считаю, что релиз Laravel 9 в большей степени является минорным "техническим" релизом. Обязательство выпускать только один мажорный релиз в год действительно подтолкнуло нас к выпуску большого количества продуктов, которые мы обычно приберегали для мажорного релиза".
Джесс Арчер (Jess Archer)
"Laravel 9 не содержит такого большого количества флагманских фич, как обычный релиз Laravel, поскольку команда разработчиков перешла на годовой цикл релизов, они планируют новые фичи в течение года. На сайте https://laravel-news.com/laravel-9 приведен довольно подробный список новых фич. Единственное, что там не упомянуто, и чему я лично очень рада, - это поддержка дженериков в классе Collection, которая поможет улучшить статический анализ."
Заключение
Laravel — востребованный PHP-фреймворк, который все больше привлекает внимание разработчиков. Его предстоящий мажорный релиз является основным после 12-месячного цикла выпуска, и уже сейчас можно судить о том, что в нем появятся новые "сочные" фичи. Скорее всего, Laravel будет дополнять список новых фич вплоть до даты релиза, поэтому следите за новостями, чтобы узнать о будущих обновлениях и обзорах.
Материал подготовлен в преддверии старта онлайн-курса "Framework Laravel".
Недавно в рамках курса прошел открытый урок, посвященный инструменту Laravel Telescope. Если интересно, посмотрите в записи.
Комментарии (8)
TheRikipm
23.09.2023 10:34+3Для Laravel 9 уже даже багфиксы перестали выпускать (за исключением security fixes).
pOmelchenko
23.09.2023 10:34+2Материал подготовлен в преддверии старта курса
Курс по 8 версии будет, видимо
hierarchical
23.09.2023 10:34ChatGPT использует старые базы и пока еще не знает о существовании 10 версии
daager
>>На подходе уже 9-я версия Laravel
Уже Laravel 10 вышла более полугода назад.