Динамічний кеш, база даних та генератори електронних листів у Laravel 11.31

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 14 листопада, 2024
У новій версії Laravel v11.31 було представлено безліч захоплюючих можливостей, таких як динамічне створення кешу, баз даних і листів, а також нові методи для покращення безпеки ваших додатків. Які саме нововведення вразять вас найбільше? Читайте статтю, щоб дізнатися більше!

Команда Laravel представила версію v11.31, яка включає динамічні будівники кешу, бази даних та електронної пошти, репозиторій токенів кешу, метод URL::forceHttps() для зручності та багато іншого

# Репозиторій токенів кешу

Ендрю Браун додав репозиторій токенів кешу, що є альтернативним способом зберігання токенів скидання паролів:

Цей запит пропонує новий CacheTokenRepository, який дозволяє обробляти токени скидання паролів через кеш. На мою думку, кеш ідеально підходить для цієї мети, оскільки він є більш епhemeral, як і токени скидання паролів

Щоб активувати цей новий CacheTokenRepository, відредагуйте config/auth.php таким чином:

'passwords' => [
 
    // новий драйвер кешу
    'customers' => [
        'driver'   => 'cache',
        'store'    => 'passwords',
        'provider' => 'customers',
        'expire'   => 60,
        'throttle' => 60,
    ],
 
   // старий драйвер бази даних
    'users'     => [
        'provider' => 'users',
        'table'    =>'password_reset_tokens',
        'expire'   => 60,
        'throttle' => 60,
    ],
],

Деталі реалізації можна знайти в Запиті на злиття #53428.

# Динамічне створення маркетологів на вимогу

Стів Бауман додав можливість динамічно створювати маркетолога та надсилати його за допомогою методу Mail::build(). Це дозволяє розробникам створювати маркетологів на основі заданої конфігурації, замість того, щоб хардкодити їх у файлах конфігурації:

use Illuminate\Support\Facades\Mail;
 
$mailer = Mail::build([
    'transport' => 'smtp',
    'host' => '127.0.0.1',
    'port' => 587,
    'encryption' => 'tls',
    'username' => 'usr',
    'password' => 'pwd',
    'timeout' => 5,
]);
 
$mailer->send($mailable);

Деталі обговорення та реалізації в Запиті на злиття #53411.

# Додавання методу DB::build()

Подібно до методу Mail::build(), Стів Бауман додав DB::build() для динамічного створення нових з'єднань з базою даних, які не визначені у вашому конфігураційному файлі:

use Illuminate\Support\Facades\DB;
 
$sqlite = DB::build([
    'driver' => 'sqlite',
    'database' => ':memory:',
]);
 
$mysql = DB::build([
    'driver' => 'mysql',
    'database' => 'forge',
    'username' => 'root',
    'password' => 'secret',
]);
 
$pgsql = DB::build([
    'driver' => 'pgsql',
    // ...
]);
 
$sqlsrv = DB::build([
    'driver' => 'sqlsrv',
    // ...
]);

Детальніше в Запиті на злиття #53464.

# Додавання Cache::build() для створення кеш-репозиторіїв на вимогу

Стів Бауман додав можливість динамічно створювати кеш-репозиторії за допомогою методу Cache::build(). Подібно до методів динамічного створення DB та Mailer, ви можете створити кеш-репозиторії, не визначені у вашому конфігураційному файлі:

use Illuminate\Support\Facades\Cache;
 
$apc = Cache::build([
    'driver' => 'apc',
]);
 
$array = Cache::build([
    'driver' => 'array',
    'serialize' => false,
]);
 
$database = Cache::build([
    'driver' => 'database',
    'table' => 'cache',
    'connection' => null,
    'lock_connection' => null,
]);
 
$file = Cache::build([
    'driver' => 'file',
    'path' => storage_path('framework/cache/data'),
]);

Деталі реалізації доступні в Запиті на злиття #53454.

# Метод onQueue() тепер приймає Backed Enums

Філіп Іеззі додав можливість використовувати підтверджені перерахування за допомогою методу onQueue() в ланцюзі Bus:

// До
Bus::chain($jobs)
    ->onQueue(QueueName::long->value)->dispatch();
 
// Після
Bus::chain($jobs)
    ->onQueue(QueueName::long)->dispatch();

Деталі впровадження — в Запиті на злиття #53359.

# Додавання методу removeDeferredServices() в Application

Оллі Рід додав метод removeDeferredServices(), який дозволяє видаляти відкладені сервіси з контейнера програми.

// До
$deferredServices = $app->getDeferredServices();
 
unset($deferredServices['auth.password'], $deferredServices['auth.password.broker']);
 
$app->setDeferredServices($deferredServices);
 
// Після
$app->removeDeferredServices(['auth.password', 'auth.password.broker']);

Цей випадок використання не є поширеним, але цей метод гармонійно поєднується з методами отримання та налаштування відкладених сервісів. Подробиці в Запиті на злиття #53362.

# Можливість додавати і видаляти пріоритети посередників

Оллі Рід запровадив можливість додавання та видалення пріоритетів посередників у конфігурації програми, що дозволяє додавати посередники до/після методів ядра:

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        $middleware->appendToPriorityList(
            [
                \Illuminate\Cookie\Middleware\EncryptCookies::class,
                \Illuminate\Contracts\Auth\Middleware\AuthenticatesRequests::class,
            ],
            \Illuminate\Routing\Middleware\ValidateSignature::class
        );
 
        $middleware->prependToPriorityList(
            [
                \Illuminate\Cookie\Middleware\EncryptCookies::class,
                \Illuminate\Contracts\Auth\Middleware\AuthenticatesRequests::class,
            ],
            \Illuminate\Routing\Middleware\ValidateSignature::class
        );
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();

Детальніше в Запиті на злиття #53326.

# Додавання методу forceHttps() для примусового використання HTTPs

Дасун Таранг реалізував метод forceHttps(), що спрощує жорстке застосування HTTPs для URL-адрес. Цей метод приймає логічне значення, що дозволяє легко вимагати HTTPs для певного набору середовищ:

URL::forceHttps(
    $this->app->isProduction()
);
 
URL::forceHttps(
    $this->app->environment('staging', 'production')
);

Деталі реалізації в Запиті на злиття #53381.

# Випуск

Повний список нових функцій і оновлень доступний нижче. Також можна переглянути різницю між версіями 11.30.0 та 11.31.0 на GitHub. Ці нотатки про випуск безпосередньо з чейнджлогу:

# v11.31.0