Laravel 10: Дата выхода и новые возможности
Дата выхода Laravel 10
Согласно Политике Поддержки, выпуск Laravel 10 был запланирован на 7 февраля 2023 года. По неизвестным причинам дату выпуска перенесли на 14 февраля 2023 года. Выпуск Laravel 11, также перенесли с фиксированной даты 6 февраля 2024 года, на 1 квартал 2024 года
Версия | PHP | Дата выхода | Исправление ошибок | Исправление безопасности |
---|---|---|---|---|
6 (LTS) | 7.2 - 8.0 | 3 Сентября 2019 | 25 Января 2022 | 6 Сентября 2022 |
7 | 7.2 - 8.0 | 3 Марта 2020 | 3 Октября 2020 | 3 Марта 2021 |
8 | 7.3 - 8.1 | 8 Сентября 2020 | 26 Июля 2022 | 24 Января 2023 |
9 | 8.0 - 8.1 | 8 Февраля 2022 | 8 Августа 2023 | 6 Февраля 2024 |
10 | 8.1 - 8.2 | 14 Февраля 2023 | 6 Августа 2024 | 4 Февраля 2025 |
11 | 8.2 | 1 квартал 2024 | 5 Августа 2025 | 3 Февраля 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 включает множество готовых возможностей из коробки, таких как:
- Методы плавного процесса для создания и запуска экземпляра процесса перед его запуском.
- Обработка выходных данных по мере их поступления.
- Асинхронные процессы.
- Пулы процессов.
- Богатые возможности тестирования через
fake()
. - Предотвращение паразитных процессов во время тестов.
Тестирование процессов никогда не было проще.
Прекращена поддержка 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:
- [10.x] Remove deprecated Route::home method
- [10.x] Remove deprecated assertTimesSent
- [10.x] Remove deprecated method handleDeprecation
- [10.x] Remove deprecated dates property
- [10.x] Use native php 8.1 array_is_list function
- [10.x] Remove deprecations
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?
- Посмотрите, что происходит с Laravel 10 на GitHub: https://github.com/laravel/framework/pulls Pull Request расскажут вам о том, что у же сделано.
- Возьмите одну из проблем фреймворка и сделайте своё решение.
- Отправьте Pull Request в репозиторий laravel/framework, получите отзывы, улучшите и отправьте на слияние.
Один важный совет, чтобы увеличить шанс на включение ваших изменений: добавьте что-то, что принесёт пользу разработчикам, но не будет проблемой в долгосрочной перспективе для Тейлора и его команды.