Laravel 10 — Что нового?

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.