Створення екземплярів PHP-класів з заповненням фейковими даними за допомогою Faker

4
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 23 березня, 2026
Ви коли-небудь стикалися з труднощами під час тестування вашого Laravel-застосунку через нестачу реалістичних даних? Пакет Dummy, розроблений Стівом Бауманом, істотно спростить цей процес, дозволяючи вам генерувати об'єкти класів з реалістичними даними за допомогою Faker. Читайте далі, щоб дізнатися, як він може допомогти у вашій розробці

Dummy — це пакет, створений Стівом Бауманом, який дозволяє генерувати екземпляри PHP-класів із заповненими випадковими даними за допомогою Faker. Це може бути дуже корисно для отримання екземплярів будь-якого класу (не лише моделей Eloquent) з реалістичними даними під час тестування, заповнення бази даних або швидкого прототипування.

Встановити пакет можна через Composer:

composer require directorytree/dummy

Dummy надає можливість генерувати класи з випадковими даними двома способами:

  1. Використовуючи трейт HasFactory безпосередньо в класі, для якого потрібно згенерувати випадкові екземпляри.
  2. Використовуючи окремий Factory клас, що надає більше контролю над процесом генерації даних.

Приклади кожного з варіантів наведені нижче:

namespace App\Data;
 
use Faker\Generator;
use DirectoryTree\Dummy\HasFactory;
 
class Player
{
    use HasFactory;
 
    /**
     * Створити новий екземпляр гравця.
     */
    public function __construct(
        public string $name,
        public DateTime $dob,
        public string $nationality,
    ) {}
 
    /**
     * Визначити стандартний стан фабрики.
     */
    protected function getFactoryDefinition(Generator $faker): array
    {
        return [
            'name' => $faker->name(),
            'dob' => $faker->dateTimeBetween('1970-01-01', '-16 years'),
            'nationality' => $faker->country(),
        ];
    }
 
    /**
     * Створити новий екземпляр класу, використовуючи визначення фабрики.
     */
    protected static function toFactoryInstance(array $attributes): static
    {
        return new static(
            $attributes['name'],
            $attributes['dob'],
            $attributes['nationality'],
        );
    }
}
namespace App\Factories;
 
use App\Data\Player;
use DirectoryTree\Dummy\Factory;
 
class PlayerFactory extends Factory
{
    /**
     * Визначити стандартний стан фабрики.
     */
    protected function definition(): array
    {
        return [
            'name' => $this->faker->name(),
            'dob' => $this->faker->dateTimeBetween('1970-01-01', '-16 years'),
            'nationality' => $this->faker->country(),
        ];
    }
 
    /**
     * Згенерувати новий екземпляр класу.
     */
    protected function generate(array $attributes): Player
    {
        return new Player(
            $attributes['name'],
            $attributes['dob'],
            $attributes['nationality'],
        );
    }
}

Для генерації випадкових екземплярів класу можна використовувати метод make:

// Використовуючи трейт:
$player = Player::factory()->make();
 
// Використовуючи клас фабрики:
$player = PlayerFactory::new()->make();

Крім того, пакет дозволяє:

Отже, у підсумку, Dummy є доповненням до стандартних класів фабрик Laravel, розширюючи підтримку для невиконаних класів, пропонуючи як варіант з трейтом, так і окремі реалізації фабрики, а також забезпечуючи зручний API для генерації екземплярів. Це універсальний інструмент для створення випадкових даних у різних частинах вашої програми.

Дізнайтеся більше про цей пакет та перегляньте вихідний код на GitHub.

Популярні

Logomark Logotype

Claude Agent тепер інтегрований в AI Assistant для PhpStorm

Ви коли-небудь задумувалися, як полегшити свою роботу в Laravel? У нашій статті ми розглядаємо, як інтеграція Claude Code в PhpStorm може підвищити вашу продуктивність, спростивши процес написання коду та навчання нових розробників. Читайте далі, щоб дізнатися більше про переваги та функціональність цього потужного поєднання

Logomark Logotype

Все, що потрібно знати про Laravel 13

Laravel 13 вийде в березні 2026 року й вимагатиме мінімум PHP 8.3. Хочете дізнатися, як PHP‑атрибути для моделей, нові налаштування черг і метод Cache::touch() вплинуть на вашу розробку?

Logomark Logotype

Intervention Image: потужний інструмент для роботи з зображеннями у Laravel

Досліджуйте потужний пакет Intervention Image для PHP, який виводить редагування зображень на новий рівень з оновленою версією 3. Чи готові ви дізнатися, які нові можливості та функції чекають на вас у цьому інструменті