Что нового в Laravel 8
Согласно плану выпуска версии Laravel, Laravel 8 выйдет 8 сентября 2020 года. Команда Laravel выпускает новую версию Laravel каждые 6 месяцев с большим количеством изменений. Как и Laravel 8 Non-LTS (общая версия), Laravel 8 будет предоставлять 6-месячные исправления ошибок до 8 марта 2021 года, и 1 год исправлений безопасности - до 8 сентября 2021 года. В Laravel 8 мы получим много новых функций и улучшений. Давайте рассмотрим, что нового появилось в Laravel 8.
Потому, официальная дата выхода Laravel 8 запланирована на 8 сентября. Но, скорее всего, вы читаете эту статью уже некоторое время спустя.
Что нового в Laravel 8
Laravel 8 имеет несколько новых функций, таких как группировка заданий (Job Batching), изменение каталога моделей по умолчанию, Schema Dump, Laravel Jetstream и улучшение предыдущих функций, таких как кэширование маршрутов, режим обслуживания сайта (maintenance mode), Rate Limit и больше исправлений ошибок. Давайте посмотрим, что добавилось и улучшилось в Laravel 8.
Job Batching
Группировка заданий, и их обработка теперь стала проще с новой функцией Bus::batch()
. Это одна из самых интересных особенностей Laravel 8. Всё, что вам нужно сделать - просто передать все свои задания в Bus::batch()
и получить ответ. Вот пример.
Bus::batch([
new Job1(),
new Job2()
])->then(function (Batch $batch) {
if ($batch->hasFailures()) {
// die
}
})->success(function (Batch $batch){
// выполняется, когда все задачи были выполнены
// ...
})->catch(function (Batch $batch,$e){
// выполняется, когда выполнение задачи закончилось ошибкой
// ...
})->allowFailures()->dispatch();
В ответе будет приведена статистика выполненной работы. Вот пример ответа.
Для поиска информации о подобной группе задании вы можете использовать Bus::findBatch($batchId)
Новая директория для моделей (сущностей)
С Laravel 8, каталог моделей по умолчанию теперь в app/Models
. До Laravel 8 все модели были в каталоге app
, что было очень громоздко, когда в нашем приложении появлялось много моделей. Теперь модели, по умолчанию, будут создавать в app/Models
, что делает Laravel 8 более организованным.
Laravel Jetstream
It gives you beautiful scaffolding for laravel application. It is completely free and open-source. It has in-build features like user profile management, Two-factor Authentication, API tokens, Team management, Multi-Session Management and a lot of cool stuff. Jetstream design with Tailwind CSS and you can choose scaffolding with Livewire or Inertia.
Laravel Jetstream - это новый продукт в экосистеме Laravel. Это красиво оформленный каркас приложений для Laravel. Он содержит много готовых базовых функций: профиль пользователя, 2-факторная аутентификация, API токены, управление командой, управление несколькими сессиями, и много других полезных штук.
Jetstream использует CSS фреймворк Tailwind CSS, и, помимо него, вы можете использовать каркас с Laravel Livewire или Inertia.
Laravel Factory
Laravel 8 предоставляет ещё более легкий способ массового создания данных с помощью усовершенствованной фабрики моделей. Давайте посмотрим, насколько крутыми фабрики стали.
Route::get('test-factory', function() {
return User::factory()->create();
});
Route::get('test-factory', function() {
return User::factory()->times(10)->create();
});
Schema Dump
В фреймворк была добавлена новая artisan команда php artisan schema:dump
. Эта команда полезна в проектах с огромным количеством миграций, и файлов миграций, которые больше не нужны.
Выполнив эту команду, будет создан дамп базы данных database/schema/{connection}-schema.mysql
с текущим состоянием вашей базы данных. В результат чего, когда вы выполните php artisan migrate
, или php artisan migrate:fresh
, и на этот момент, ни одной миграции не было применено (таблица migrations
пустая), этот дамп будет загружен в вашу базу данных.
В результате чего, это позволяет нам удалить старые миграции, потому что они будут загружены в дамп. Так же, это приводит к приросту скорости во время тестирования, так как Laravel теперь не нужно выполнять последовательно все миграции последовательно.
Улучшение Rate Limiting
В прошлых статьях я писал о том, как пользовать Rate Limit-ом, и задавать лимиты по запросам на конкретный URL приложения. В laravel 8 теперь можно по-новому, легче и удобнее задавать лимиты. Вот пример:
Создание Лимита Запросов:
RateLimiter::for('upload', function (Request $request) {
Limit::perMinute(10)->by($request->ip()),
});
RateLimiter::for('download', function (Request $request) {
if ($request->user()->isSubscribed()) {
return Limit::none();
}
Limit::perMinute(10)->by($request->ip()),
});
Создание Лимита Запросов на основе middleware:
Route::get('/upload','UploadController@index')->->middleware('throttle:upload');
Route::get('/download','DownloadController@index')->->middleware('throttle:download');
// или можно создать группу для этих целей
Route::middleware(['throttle:upload'])->group(function () {
});
Улучшение Режима Обслуживания (Maintenance Mode)
До Laravel 8 мы использовали команду php artisan down
, чтобы временно отключить наш сайт для технических работ. Но, предыдущая реализация этой функции не позволяла должным образом кастомизировать отображаемую страницу. В Laravel 8 это сделано более удобно и дружелюбно.
php artisan down --secret=myByPassSecret
Когда вы зайдёте на сайт с использованием пароля входа, вы сможете пользоваться сайтом, как и раньше. Maintenance middlewere
перехватит ваш запрос, установит куки доступа, и перенаправит на главную страницу сайта /
.
http://example.com/myByPassSecret
Вы можете настроить дополнительные параметры режима обслуживания.
php artisan down --redirect=/ --status=200 --secret=myByPassSecret --render="errors::503"
Объяснение
- Отключить приложение от сети
- Перенаправить все маршруты на "/"
- Установить код HTTP-ответа
- Установите секретный пароль для обхода технического обслуживания
- Отобразить blade шаблон во время технического обслуживания
Time Traveller
C Laravel time traveller хелпером вам будет проще управлять датой/временем. В базовом классе для тестов этот хелпер уже включён по-дефолту. Вот несколько примеров:
// заглянем в будущее
$this->travel(10)->seconds();
$this->travel(10)->minutes();
// посмотрим в прошлое
$this->travel(-8)->seconds();
$this->travel(-8)->minutes();
Динамические Blade компоненты
Теперь, с Laravel 8 вы можете рендерить blade-компоненты динамически. Благодаря этой функции, вы можете во время выполнения приложения выбрать, какой компонент будет отображен.
<x-dynamic-component :component="$componentName" />
Изменение пагинации по умолчанию
Теперь пагинация в Laravel 8 будет использовать Tailwind CSS по умолчанию.
Улучшение кеширование маршрутов (роутинга)
С Laravel 8 вы можете кэшировать ваши маршруты, даже если вы используете анонимные функции в определении маршрута.
Route::get('/about',function(){
return view('about');
});
Улучшение php artisan serve
До Laravel 8 нам приходилось перезапускать наше приложение laravel командой php artisan serve
каждый раз, когда мы вносили изменения в файл .env
. В laravel 8 теперь нам не нужно перезапускать сервер каждый раз, даже если мы изменяли наш .env
-файл.
Резюме
В этой статье я перечислил список того, что было добавлено, или улучшено в новой версии Laravel. Благодаря этой статье вы узнали что нового в laravel 8.