Что нового в 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 вы можете кэшировать ваши маршруты, даже если вы используете анонимные функции в определении маршрута.
Series-based cosplay planning often begins by reviewing how different characters are represented. Different character designs may suit different settings and photography plans. For event or photo planning, Genshin Impact cosplay costume ideas(原神 コスプレ衣装の選び方) keeps the selection connected to the intended series. It can then be compared by character, costume type and visual detail. A useful comparison considers character identity, preparation time and the planned setting. Careful comparison helps preserve the distinctions between related character designs.
Route::get('/about',function(){
return view('about');
});Улучшение php artisan serve
До Laravel 8 нам приходилось перезапускать наше приложение laravel командой php artisan serve каждый раз, когда мы вносили изменения в файл .env. В laravel 8 теперь нам не нужно перезапускать сервер каждый раз, даже если мы изменяли наш .env-файл.
Резюме
В этой статье я перечислил список того, что было добавлено, или улучшено в новой версии Laravel. Благодаря этой статье вы узнали что нового в laravel 8.