Додано атрибут UseFactory у Laravel 11.39

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 24 січня, 2025
Цього тижня команда Laravel випустила оновлення v11.39, яке включає нові можливості, такі як атрибут моделі UseFactory та опції конфігурації для PhpRedis. Дізнайтеся, як ці оновлення можуть спростити вашу роботу і підвищити продуктивність ваших проєктів!

Цього тижня команда Laravel випустила версію v11.39, до якої додано атрибут класу фабрики моделей, можливість запобігти руйнівним відкатам, параметри повторних спроб і затримки для PhpRedis та багато іншого.

# Введення атрибута UseFactory

Чриз Артер додав атрибут UseFactory для визначення, яку фабрику слід використовувати для моделі. Це зручно для реєстрації фабрики для моделей поза звичайним простором імен App\Models:

namespace App\SomeFeatureDomain\Models\Comment;

use Database\Factories\CommentFactory;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Attributes\UseFactory;

#[UseFactory(CommentFactory::class)]
class Comment extends Model
{
    use HasFactory;
    // ...
}

Ще один спосіб перевизначити фабричну конвенцію — це визначити метод newFactory(), який матиме вищий пріоритет над атрибутом UseFactory(), якщо ви обидва визначите:

use Database\Factories\CommentFactory;

/**
 * Створити новий екземпляр фабрики для моделі.
 */
protected static function newFactory()
{
    return CommentFactory::new();
}

Згідно з описом запиту на злиття, пріоритет вирішення фабрики такий:

  1. Статична властивість $factory, якщо визначена
  2. Атрибут UseFactory, якщо присутній
  3. Вирішення фабрики на основі конвенцій

Деталі про те, як завантажуються фабрики, можна знайти в документації про Конвенції виявлення моделей і фабрик.

# Додати опцію звітності/логування у файлову систему

Савіо Резенде додав опції throw і report в драйвер файлової системи. Якщо обидва параметри встановлені в true, це означає, що диск не викидатиме винятків і звітуватиме про помилки:

'disks' => [
    'local' => [
        'driver' => 'local',
        'root' => storage_path('app'),
        'throw' => false, // Приховати винятки
        'report' => true,    // Увімкнути логування помилок
    ],
],

Деталі про роботу цих опцій можна знайти в Запиті на злиття #54212.

# Запобігання руйнівних відкатів

Райнер Бендіг додав можливість запобігати руйнівним операціям RollbackCommand, якщо додаток настроєний для заборони руйнівних команд з:

DB::prohibitDestructiveCommands(true);

# Додати шлях до завантажувача перекладів

Селчук Чукур додав метод addPath() для додавання директорії до завантажувача перекладів:

Раніше було неможливо додати нову директорію без простору імен для завантажувача перекладів. Цей метод дозволяє завантажувати рядки перекладів, включаючи нову директорію без простору імен.

Деталі можна знайти в Запиті на злиття #54277.

# Додати підтримку параметрів phpredis для затримки та максимальної повторної спроби

Петро Левтонов додав параметри конфігурації для затримки та повторної спроби у з'єднанні phpredis:

Цей запит на злиття додає підтримку конфігурацій ~phpredis backoff/retry~.

Ці налаштування є критично важливими для високопродуктивних додатків. Наразі я змушений переписувати драйвер у багатьох сервісах, щоб скористатися цими конфігураціями. Було б чудово, якби ви це об'єднали, щоб підтримувати ці конфігурації з коробки.

Я підтвердив з утримувачем phpredis, що ці налаштування наразі доступні лише для звичайного класу Redis, а не для RedisCluster, тому я їх не додав до налаштувань кластера.

Для довідки, у розділі PhpRedis документації Laravel наведені ці нові опції.

# Примітки до випуску

Повний список нових функцій та оновлень дивіться нижче та порівняйте зміни між 11.38.0 і 11.39.0 на GitHub. Наступні примітки до випуску взято з змінної документації:

# v11.38.0