Игра Яндекс Практикума
Игра Яндекс Практикума
Игра Яндекс Практикума

Вышел релиз Laravel 11, что нового?

Новости

Laravel 11 представляет минимальную структуру приложения, по умолчанию использует SQLite, реализует health routing, улучшает тестирование очередей, вводит новые команды Artisan, добавляет транспорт для повторной отправки почты, интегрирует средство проверки запросов и многое другое.

1К открытий6К показов
Вышел релиз Laravel 11, что нового?
Важно! Для Laravel 11.x требуется как минимум PHP 8.2. 

Минимальная структура приложения

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

Новая структура приложения призвана обеспечить более компактное и современное взаимодействие, сохраняя при этом многие концепции, с которыми разработчики Laravel уже знакомы.

Файл  bootstrap/app.php

Теперь с помощью этого файла вы можете настроить маршрутизацию, middleware, сервис-провайдер, обработку исключений и многое другое.

Этот файл объединяет множество высокоуровневых настроек поведения, которые ранее были разбросаны по файловой структуре вашего приложения:

			return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        //
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();
		

Сервис-провайдеры

Вместо структуры приложения Laravel по умолчанию, содержащей пять сервис-провайдеров, Laravel 11 включает только один AppServiceProvider.

Функциональность предыдущих сервис-провайдеров была включена в bootstrap/app.php, обрабатывается фреймворком автоматически или может быть размещена в AppServiceProvider вашего приложения.

Маршрутизация api и broadcast

Файлы api.php и channels.php  удалены по умолчанию, поскольку многим приложениям эти файлы не требуются.

Вместо этого их можно создать с помощью простых команд Artisan:

			php artisan install:api
 
php artisan install:broadcasting
		

Middleware

Ранее новые приложения Laravel включали девять middleware, таких как аутентификация, CSRF-токенов и прочее.

В Laravel 11 функциональность middleware перенесена в сам фреймворк. По-видимому, разработчики решились на этот шаг, чтобы не раздувать само приложение — большая часть middleware всё равно не использовалась.

Настроить их поведение можно вызвав методы из файла bootstrap/app.php:

			->withMiddleware(function (Middleware $middleware) {
    $middleware->validateCsrfTokens(
        except: ['stripe/*']
    );
 
    $middleware->web(append: [
        EnsureUserIsSubscribed::class,
    ])
})
		

Поскольку все middleware легко настраиваются с помощью bootstrap/app.php, необходимость в отдельном классе HTTP "kernel" отпала.

Планировщик

Используя новый интерфейс планировщика, задачи теперь можно определять непосредственно в файле вашего приложения routes/console.php, устраняя необходимость в отдельном консольном классе "kernel".:

			use Illuminate\Support\Facades\Schedule;
 
Schedule::command('emails:send')->daily();

		

Обработка исключений

Подобно маршрутизации и middleware, обработку исключений теперь можно настроить из файла вашего приложения bootstrap/app.php вместо отдельного класса обработчика исключений, что сокращает общее количество файлов, включаемых в новое приложение Laravel:

			->withExceptions(function (Exceptions $exceptions) {
    $exceptions->dontReport(MissedFlightException::class);
 
    $exceptions->report(function (InvalidOrderException $e) {
        // ...
    });
})
		

Контроллер по умолчанию

Базовый контроллер, включенный в новые приложения Laravel, упростили. Он больше не расширяет внутренний класс контроллера Laravel, а функции AuthorizesRequests и ValidatesRequests были удалены, поскольку при желании они могут быть включены в отдельные контроллеры вашего приложения:

			<?php
 
namespace App\Http\Controllers;
 
abstract class Controller
{
    //
}
		
Вышел релиз Laravel 11, что нового? 1
структура laraver приложения

SQLite по умолчанию

По умолчанию новые приложения Laravel используют SQLite для хранения базы данных, а также драйвер для сессий, кэша и очереди Laravel. 

Кроме того, создание проекта с использованием composer create-project позволяет приступить к сборке вашего приложения сразу после создания нового, без необходимости устанавливать дополнительное программное обеспечение или заниматься миграцией баз данных.

Вышел релиз Laravel 11, что нового? 2
миграция таблиц SQLite

Health-check Routing

Новые приложения Laravel 11 включают health-check эндпоинт, с помощью которого сторонние службы мониторинга или такие сервисы, как Kubernetes, могут проверить работоспособность приложения.

эндпоинт по умолчанию:  /up

Когда HTTP-запросы отправляются по этому маршруту, Laravel отправляет событие DiagnosingHealth, которое запускает дополнительные проверки. Это может быть проверка подключения к базе данных или работы кэша.

Вышел релиз Laravel 11, что нового? 3
Ответ приложения на проверку статуса

Изящная ротация ключа шифрования

Поскольку Laravel шифрует все файлы cookie, включая файлы cookie сеанса вашего приложения, по сути, каждый запрос к приложению Laravel основан на шифровании. Однако из-за этого смена ключа шифрования приложения приведет к выходу всех пользователей из приложения.

Кроме того, расшифровка данных, которые были зашифрованы предыдущим ключом шифрования, становится невозможной.

Laravel 11 позволяет вам определять предыдущие ключи шифрования  приложения в виде списка, разделенного запятыми, с помощью переменной окружения APP_PREVIOUS_KEYS:

Вышел релиз Laravel 11, что нового? 4
Объявление ключей шифрования

При шифровании значений Laravel всегда будет использовать "текущий" ключ шифрования, который находится в переменной окружения APP_KEY.

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

Такой подход к изящному дешифрованию позволяет пользователям продолжать использовать ваше приложение без сбоев, даже если ваш ключ шифрования изменился.

Для получения дополнительной информации о шифровании в Laravel ознакомьтесь с документацией по шифрованию.

Тестирование взаимодействия с очередью

Ранее попытка проверить, что задание, поставленное в очередь, было выпущено, удалено или завершилось ошибкой вручную, была громоздкой и требовала определения пользовательских подделок очереди и заглушек.

Однако в Laravel 11 вы можете легко протестировать эти взаимодействия с очередями, используя метод withFakeQueueInteractions:

Вышел релиз Laravel 11, что нового? 5

Помимо утверждения assertReleased, которое вы можете использовать для проверки того, было ли задание возвращено обратно в очередь, вы также можете использовать утверждения assertFailed или assertDeleted, чтобы определить, завершилось ли задание ошибкой или было удалено соответственно.

Посекундный Rate Limiting

Laravel теперь поддерживает ограничение скорости "в секунду" для всех ограничителей скорости, в том числе для HTTP-запросов и заданий в очереди. Ранее ограничители скорости в Laravel были ограничены степенью детализации "в минуту" :

			RateLimiter::for('invoices', function (Request $request) {
    return Limit::perSecond(1);
});
		

Laravel Prompts

Laravel Prompts - это PHP-пакет для добавления красивых и удобных форм в ваши приложения командной строки с функциями, подобными браузеру, включая placeholder и валидацию.

Laravel Prompts поддерживает проверку ввода с помощью замыканий:

			$name = text(
    label: 'What is your name?',
    validate: fn (string $value) => match (true) {
        strlen($value) < 3 => 'The name must be at least 3 characters.',
        strlen($value) > 255 => 'The name must not exceed 255 characters.',
        default => null
    }
);
		

Однако это может стать громоздким при работе со многими входными данными или сложными сценариями проверки. 

Таким образом, в Laravel 11 вы можете использовать все возможности валидатора Laravel при проверке вводимых запросов:

			$name = text('What is your name?', validate: [
    'name' => 'required|min:3|max:255',
]);
		

Новые команды Artisan

Добавлены новые команды Artisan, позволяющие быстро создавать классы, перечисления, интерфейсы и свойства:

			php artisan make:class
php artisan make:enum
php artisan make:interface
php artisan make:trait
		

Laravel Reverb

Laravel Reverb обеспечивает невероятно быструю и масштабируемую связь через WebSocket в режиме реального времени непосредственно с вашим приложением Laravel и обеспечивает плавную интеграцию с существующим набором инструментов трансляции событий Laravel, таких как Laravel Echo.

			php artisan reverb:start
		

Кроме того, Reverb поддерживает горизонтальное масштабирование с помощью возможностей Redis, что позволяет распределять трафик WebSocket по нескольким серверам Reverb, поддерживающим одно высоконагруженное приложение.

Изменения в Моделях

В Laravel 11 касты моделей теперь определяются как метод, а не как свойство.

Когда они определены как метод, мы можем делать и другие вещи. Например, вызывать другие методы непосредственно из кастов. Это позволяет создавать упрощенные и плавные определения приведений, особенно при использовании кастов с аргументами:

			/**
 * Get the attributes that should be cast.
 *
 * @return array<string, string>
 */
protected function casts(): array
{
    return [
        'options' => AsCollection::using(OptionCollection::class),
                  // AsEncryptedCollection::using(OptionCollection::class),
                  // AsEnumArrayObject::using(OptionEnum::class),
                  // AsEnumCollection::using(OptionEnum::class),
    ];
}
		

Функция once

Вспомогательная функция once выполняет заданный обратный вызов и кэширует результат в памяти на время выполнения запроса.

Любые последующие вызовы функции once с тем же обратным вызовом вернут ранее кэшированный результат:

			function random(): int
{
    return once(function () {
        return random_int(1, 1000);
    });
}
 
random(); // 123
random(); // 123 (cached result)
random(); // 123 (cached result)
		

Улучшена поддержка&nbsp; MariaDB

В предыдущих версиях Laravel вы могли использовать MariaDB через драйвер MySQL от Laravel. Однако в Laravel 11 теперь включен специальный драйвер MariaDB, который обеспечивает лучшие настройки по умолчанию для этой системы баз данных.

Политика поддержки Laravel

Для всех выпусков Laravel исправления ошибок предоставляются в течение 18 месяцев, а исправления безопасности - в течение 2 лет. Для всех дополнительных библиотек, включая Lumen, исправления ошибок предоставляются только в последнем основном выпуске.

Вышел релиз Laravel 11, что нового? 6

Источник: официальная документация Laravel

Следите за новыми постами
Следите за новыми постами по любимым темам
1К открытий6К показов