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)


  1. daager
    23.09.2023 10:34
    +10

    >>На подходе уже 9-я версия Laravel

    Уже Laravel 10 вышла более полугода назад.


  1. TheRikipm
    23.09.2023 10:34
    +3

    Для Laravel 9 уже даже багфиксы перестали выпускать (за исключением security fixes).


  1. odilovoybek
    23.09.2023 10:34
    +1

    Опоздали со статьей(


  1. a-tk
    23.09.2023 10:34
    +5

    Берём рандомную статью, переводим, публикуем. Команду думать никто не давал.


  1. pOmelchenko
    23.09.2023 10:34
    +2

    Материал подготовлен в преддверии старта курса

    Курс по 8 версии будет, видимо


  1. mraat
    23.09.2023 10:34

    Интересно они онлайн курс запускают тоже про 'новый' laravel 9? )


  1. Kodzo
    23.09.2023 10:34
    +3

    Они как будто соревнуются, кто хуже напишет)


  1. hierarchical
    23.09.2023 10:34

    ChatGPT использует старые базы и пока еще не знает о существовании 10 версии