Laravel 10: Дата выхода и новые возможности

Источник: «Laravel 10: release date and new features»
Laravel 10 вышел 14 февраля 2023 года. Его разработка ещё продолжается. Давайте изучим новые функции о которых уже известно.

Дата выхода Laravel 10

Согласно Политике Поддержки, выпуск Laravel 10 был запланирован на 7 февраля 2023 года. По неизвестным причинам дату выпуска перенесли на 14 февраля 2023 года. Выпуск Laravel 11, также перенесли с фиксированной даты 6 февраля 2024 года, на 1 квартал 2024 года

ВерсияPHPДата выходаИсправление ошибокИсправление безопасности
6 (LTS)7.2 - 8.03 Сентября 201925 Января 20226 Сентября 2022
77.2 - 8.03 Марта 20203 Октября 20203 Марта 2021
87.3 - 8.18 Сентября 202026 Июля 202224 Января 2023
98.0 - 8.18 Февраля 20228 Августа 20236 Февраля 2024
108.1 - 8.214 Февраля 20236 Августа 20244 Февраля 2025
118.21 квартал 20245 Августа 20253 Февраля 2026

Является ли Laravel 10 LTS (Long Term Support)

Нет, Laravel 10 не LTS.

Последний раз LTS версией выходил Laravel 6.

Каждая основная версия имеет два года исправления ошибок безопасности.

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

Установить Laravel 10 очень просто Используя официальный Laravel инсталлятор:

laravel new hello-world

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

composer create-project --prefer-dist laravel/laravel laravel-dev

Новые возможности и изменения в Laravel 10

Фасад Process

В Laravel 10 будет представлен новый фасад — Process. Подобно HTTP Фасадам упрощающим работу с API, сервис Process превратит работу с тестированием и запуском CLI процессов в мечту.

use Illuminate\Support\Facades\Process;

$result = Process::run('ls -la');

$result->successful();
$result->failed();
$result->exitCode();
$result->output();
$result->errorOutput();
$result->throw();
$result->throwIf($condition);

Фасад Process включает множество готовых возможностей из коробки, таких как:

Тестирование процессов никогда не было проще.

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

Некоторые разработчики только перешли на PHP 8.0. Тем временем, Laravel 10 прекратил поддержку PHP 8.0 и это хорошо.

Помните: крупные корпоративные обновления не нужно обновлять до последней версии сразу после её выхода. У корпоративных приложений есть платные клиенты или сотрудники, которые зависят от их работы. Им нужно медленно, но верно двигаться вперёд, проводя всестороннее тестирование.

См. pull request на GitHub: [10.x] Drop PHP 8.0

Прекращена поддержка Predis v1

Если для вас важно использование в своём проекте Predis v1, возможно, вы захотите перейти на v2. Чтобы узнать, что изменилось в Predis v2 загляните в список изменений

См. pull request на GitHub: [10.x] Drop Predis v1 support

На мой взгляд, вместо predis следует рассмотреть возможность использования нативного расширения Redis в PHP. Которое работает быстрее и может ускорить работу вашего приложения, если у вас большой трафик.

Удалён dispatchNow()

dispatchNow() — популярный метод в Laravel. Он был объявлен устаревшим в Laravel 9 и заменён dispatchSync(). В Laravel 10 он был удалён, поэтому обязательно найдите и замените его во всех своих проектах. Это может быть критическим изменением, но его легко исправить.

См. pull request на GitHub: [10.x] Remove deprecated dispatchNow functionality

Множество устаревших методов и свойств были удалены

Выпуск основной версии означает, что команда Laravel наконец может удалить функции, объявленные устаревшими в Laravel 10. Это также означает, что вы должны тщательно протестировать любое Laravel приложение, которое вы, возможно, захотите перенести на версию 10.

Вот список всех pull request:

Laravel 10 по умолчанию использует вызываемые правила валидации

В Laravel 9, вызываемые правила валидации можно было сгенерировать с помощью флага --invokable с командой php artisan make:rule. Начиная с Laravel 10, он вам больше не понадобится.

php artisan make:rule Uppercase

Что бы напомнить, что такое вызываемые правила валидации, вот так они выглядят:

namespace AppRules;

use IlluminateContractsValidationInvokableRule;

class Uppercase implements InvokableRule
{
/**
* Run the validation rule.
*
* @param string $attribute
* @param mixed $value
* @param Closure(string): IlluminateTranslationPotentiallyTranslatedString $fail
* @return void
*/

public function __invoke($attribute, $value, $fail)
{
if (strtoupper($value) !== $value) {
$fail('The :attribute must be uppercase.');
}
}
}

Шаблонный код значительно меньше и его легче понять. Благодаря Laravel 10 людей будет меньше пугать перспектива создания пользовательских правил валидации.

См. pull request на GitHub: [10.x] Make invokable rules default

Скелет Laravel 10 использует нативные типы вместо docblock

Начиная с Laravel 10 скелет использует нативные типы вместо docblock. Это масштабное изменение и всё ещё находится в процессе, потому что оно будет происходить во всей организации Laravel.

Например, в скелете Laravel метод schedule() в app/Console/Kernel.php выглядит так:

/**
* Define the application's command schedule.
- *
- * @param IlluminateConsoleSchedulingSchedule $schedule
- * @return void
*/
- protected function schedule($schedule)
+ protected function schedule(Schedule $schedule): void

Команда также добавила аннотации типа generic, которые также значительно улучшат автозаполнение при написании кода (при условии, что ваш редактор кода поддерживает generic).

См. pull request на GitHub: [10.x] Uses PHP Native Type Declarations 🐘

Как внести вклад в развитие Laravel 10?

Знаете ли вы, что можете создать следующую большую функцию Laravel 10?

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

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

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

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

PHP 8.3: Дополнение Randomizer

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

Soft delete моделей в Laravel: подробное руководство