Laravel 10 вышла 14 февраля 2023 года. В новой версии фреймворка продолжается, начатая в девятой версии, политика ввода возвращаемых типов и аргументов для всех методов скелета приложения, а также во всех заглушках (stubs), используемых для создания классов во фреймворке. Кроме того, вводится новый удобный слой абстракции для запуска и взаимодействия с внешними процессами. Также представлен пакет Laravel Pennant, обеспечивающий возможность управления «feature flags» (фича-флагами) вашего приложения.
Для Laravel 10 планируется выпускать минорные версии вплоть до февраля 2023 года, багфиксы до августа 2024 года и патчи безопасности до февраля 2025 года, то есть в поддержка версии будет осуществляться в течении двух лет.
PHP 8.1
Laravel 10.x требует минимум PHP 8.1.
Типы
В Laravel 10.x обновлён скелет приложения и все заглушки, используемые фреймворком, и введены возвращаемые типы и аргументы для всех сигнатур методов. Кроме того, была удалена лишняя информация о подсказках «doc block»:
namespace App\Http\Controllers; use App\Models\Flight; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Http\Response; class FlightController extends Controller { /** * Display a listing of the resource. */ public function index(): Response { // } /** * Display the specified resource. */ public function show(Flight $flight): Response { // } // ... }
Это изменение имеет полную обратную совместимость с существующими приложениями. Поэтому существующие приложения, не имеющие такие тайпхинты, будут продолжать работать нормально.
Laravel Pennant
Выпущен новый пакет Laravel Pennant, предлагающий легкий и оптимизированный подход к управлению флагами функций вашего приложения. Из коробки он включает в себя резидентный драйвер array
и драйвер database
для хранения данных.
Фичи можно легко задать с помощью метода Feature::define
:
use Laravel\Pennant\Feature; use Illuminate\Support\Lottery; Feature::define('new-onboarding-flow', function () { return Lottery::odds(1, 10); });
Как только Фича задана, вы можете легко проверить, имеет ли текущий пользователь к ней доступ:
if (Feature::active('new-onboarding-flow')) { // ... }
Разумеется, для удобства также сделаны Blade-директивы:
@feature('new-onboarding-flow') <div> <!-- ... --> </div> @endfeature
Pennant предлагает множество более продвинутых функций и API. Для получения дополнительной информации обратитесь к документации Pennant.
Взаимодействия с процессами
Laravel 10.x представляет прекрасный слой абстракции для запуска и взаимодействия с внешними процессами с помощью нового фасада Process
:
use Illuminate\Support\Facades\Process; $result = Process::run('ls -la'); return $result->output();
Процессы можно также запускать в пулах, что обеспечивает удобное выполнение и управление параллельными процессами:
use Illuminate\Process\Pool; use Illuminate\Support\Facades\Pool; [$first, $second, $third] = Process::concurrently(function (Pool $pool) { $pool->command('cat first.txt'); $pool->command('cat second.txt'); $pool->command('cat third.txt'); }); return $first->output();
Кроме того, процессы можно мокать для удобного тестирования:
Process::fake(); // ... Process::assertRan('ls -la');
Дополнительные сведения о взаимодействии с процессами смотрите в подробной документации по процессам.
Профилирование тестов
Artisan-команда test
получила новую опцию --profile
, позволяющую легко определять самые медленные тесты в вашем приложении:
php artisan test --profile
Для удобства самые медленные тесты будут отображаться прямо в консоли:
Pest каркас
Новые Laravel проекты теперь могут создаваться по дефолту с тестовым каркасом Pest. Чтобы включить эту функцию, укажите флаг --pest
при создании нового приложения:
laravel new example-application --pest
Подсказки для генератора в консоли
Все встроенные make
-команды в Laravel больше не требуют контекста. Если команды вызываются без контекста, то вам будет предложено ввести необходимые аргументы:
php artisan make:controller
Автор: Laravel
Перевод: Алексей Широков
Наш Телеграм-канал — следите за новостями о Laravel.