Вышел релиз Laravel 11, что нового?
Новости
Laravel 11 представляет минимальную структуру приложения, по умолчанию использует SQLite, реализует health routing, улучшает тестирование очередей, вводит новые команды Artisan, добавляет транспорт для повторной отправки почты, интегрирует средство проверки запросов и многое другое.
2К открытий6К показов
Важно! Для Laravel 11.x требуется как минимум PHP 8.2.
Минимальная структура приложения
В Laravel 11 изменился принцип структуризации приложений. Фреймворк лучше оптимизировали именно с точки зрения производительности. Изменения не коснулись уже существующих приложений, так что рефакторить или переписывать их не нужно.
Новая структура приложения призвана обеспечить более компактное и современное взаимодействие, сохраняя при этом многие концепции, с которыми разработчики Laravel уже знакомы.
Файл bootstrap/app.php
Теперь с помощью этого файла вы можете настроить маршрутизацию, middleware, сервис-провайдер, обработку исключений и многое другое.
Этот файл объединяет множество высокоуровневых настроек поведения, которые ранее были разбросаны по файловой структуре вашего приложения:
Сервис-провайдеры
Вместо структуры приложения Laravel по умолчанию, содержащей пять сервис-провайдеров, Laravel 11 включает только один AppServiceProvider
.
Функциональность предыдущих сервис-провайдеров была включена в bootstrap/app.php
, обрабатывается фреймворком автоматически или может быть размещена в AppServiceProvider
вашего приложения.
Маршрутизация api и broadcast
Файлы api.php
и channels.php
удалены по умолчанию, поскольку многим приложениям эти файлы не требуются.
Вместо этого их можно создать с помощью простых команд Artisan:
Middleware
Ранее новые приложения Laravel включали девять middleware, таких как аутентификация, CSRF-токенов и прочее.
В Laravel 11 функциональность middleware перенесена в сам фреймворк. По-видимому, разработчики решились на этот шаг, чтобы не раздувать само приложение — большая часть middleware всё равно не использовалась.
Настроить их поведение можно вызвав методы из файла bootstrap/app.php
:
Поскольку все middleware легко настраиваются с помощью bootstrap/app.php
, необходимость в отдельном классе HTTP "kernel"
отпала.
Планировщик
Используя новый интерфейс планировщика, задачи теперь можно определять непосредственно в файле вашего приложения routes/console.php
, устраняя необходимость в отдельном консольном классе "kernel
".:
Обработка исключений
Подобно маршрутизации и middleware, обработку исключений теперь можно настроить из файла вашего приложения bootstrap/app.php
вместо отдельного класса обработчика исключений, что сокращает общее количество файлов, включаемых в новое приложение Laravel:
Контроллер по умолчанию
Базовый контроллер, включенный в новые приложения Laravel, упростили. Он больше не расширяет внутренний класс контроллера Laravel, а функции AuthorizesRequests
и ValidatesRequests
были удалены, поскольку при желании они могут быть включены в отдельные контроллеры вашего приложения:
SQLite по умолчанию
По умолчанию новые приложения Laravel используют SQLite для хранения базы данных, а также драйвер для сессий, кэша и очереди Laravel.
Кроме того, создание проекта с использованием composer create-project
позволяет приступить к сборке вашего приложения сразу после создания нового, без необходимости устанавливать дополнительное программное обеспечение или заниматься миграцией баз данных.
Health-check Routing
Новые приложения Laravel 11 включают health-check эндпоинт, с помощью которого сторонние службы мониторинга или такие сервисы, как Kubernetes, могут проверить работоспособность приложения.
эндпоинт по умолчанию: /up
Когда HTTP-запросы отправляются по этому маршруту, Laravel отправляет событие DiagnosingHealth
, которое запускает дополнительные проверки. Это может быть проверка подключения к базе данных или работы кэша.
Изящная ротация ключа шифрования
Поскольку Laravel шифрует все файлы cookie, включая файлы cookie сеанса вашего приложения, по сути, каждый запрос к приложению Laravel основан на шифровании. Однако из-за этого смена ключа шифрования приложения приведет к выходу всех пользователей из приложения.
Кроме того, расшифровка данных, которые были зашифрованы предыдущим ключом шифрования, становится невозможной.
Laravel 11 позволяет вам определять предыдущие ключи шифрования приложения в виде списка, разделенного запятыми, с помощью переменной окружения APP_PREVIOUS_KEYS
:
При шифровании значений Laravel всегда будет использовать "текущий" ключ шифрования, который находится в переменной окружения APP_KEY
.
При расшифровке значений Laravel сначала попробует текущий ключ. Если при расшифровке не удается использовать текущий ключ, Laravel будет пробовать все предыдущие ключи до тех пор, пока один из ключей не сможет расшифровать значение.
Такой подход к изящному дешифрованию позволяет пользователям продолжать использовать ваше приложение без сбоев, даже если ваш ключ шифрования изменился.
Для получения дополнительной информации о шифровании в Laravel ознакомьтесь с документацией по шифрованию.
Тестирование взаимодействия с очередью
Ранее попытка проверить, что задание, поставленное в очередь, было выпущено, удалено или завершилось ошибкой вручную, была громоздкой и требовала определения пользовательских подделок очереди и заглушек.
Однако в Laravel 11 вы можете легко протестировать эти взаимодействия с очередями, используя метод withFakeQueueInteractions
:
Помимо утверждения assertReleased
, которое вы можете использовать для проверки того, было ли задание возвращено обратно в очередь, вы также можете использовать утверждения assertFailed
или assertDeleted
, чтобы определить, завершилось ли задание ошибкой или было удалено соответственно.
Посекундный Rate Limiting
Laravel теперь поддерживает ограничение скорости "в секунду" для всех ограничителей скорости, в том числе для HTTP-запросов и заданий в очереди. Ранее ограничители скорости в Laravel были ограничены степенью детализации "в минуту" :
Laravel Prompts
Laravel Prompts - это PHP-пакет для добавления красивых и удобных форм в ваши приложения командной строки с функциями, подобными браузеру, включая placeholder и валидацию.
Laravel Prompts поддерживает проверку ввода с помощью замыканий:
Однако это может стать громоздким при работе со многими входными данными или сложными сценариями проверки.
Таким образом, в Laravel 11 вы можете использовать все возможности валидатора Laravel при проверке вводимых запросов:
Новые команды Artisan
Добавлены новые команды Artisan, позволяющие быстро создавать классы, перечисления, интерфейсы и свойства:
Laravel Reverb
Laravel Reverb обеспечивает невероятно быструю и масштабируемую связь через WebSocket в режиме реального времени непосредственно с вашим приложением Laravel и обеспечивает плавную интеграцию с существующим набором инструментов трансляции событий Laravel, таких как Laravel Echo.
Кроме того, Reverb поддерживает горизонтальное масштабирование с помощью возможностей Redis, что позволяет распределять трафик WebSocket по нескольким серверам Reverb, поддерживающим одно высоконагруженное приложение.
Изменения в Моделях
В Laravel 11 касты моделей теперь определяются как метод, а не как свойство.
Когда они определены как метод, мы можем делать и другие вещи. Например, вызывать другие методы непосредственно из кастов. Это позволяет создавать упрощенные и плавные определения приведений, особенно при использовании кастов с аргументами:
Функция once
Вспомогательная функция once
выполняет заданный обратный вызов и кэширует результат в памяти на время выполнения запроса.
Любые последующие вызовы функции once
с тем же обратным вызовом вернут ранее кэшированный результат:
Улучшена поддержка MariaDB
В предыдущих версиях Laravel вы могли использовать MariaDB через драйвер MySQL от Laravel. Однако в Laravel 11 теперь включен специальный драйвер MariaDB, который обеспечивает лучшие настройки по умолчанию для этой системы баз данных.
Политика поддержки Laravel
Для всех выпусков Laravel исправления ошибок предоставляются в течение 18 месяцев, а исправления безопасности - в течение 2 лет. Для всех дополнительных библиотек, включая Lumen, исправления ошибок предоставляются только в последнем основном выпуске.
Источник: официальная документация Laravel
2К открытий6К показов