/ laravel

Что нового в 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();

В ответе будет приведена статистика выполненной работы. Вот пример ответа.
batch-job-response

Для поиска информации о подобной группе задании вы можете использовать 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.

68747470733a2f2f6c61726176656c2e636f6d2f696d672f6a657473747265616d2d707265766965772e706e67

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.