Dummy — це пакет, створений Стівом Бауманом, який дозволяє генерувати екземпляри PHP-класів із заповненими випадковими даними за допомогою Faker. Це може бути дуже корисно для отримання екземплярів будь-якого класу (не лише моделей Eloquent) з реалістичними даними під час тестування, заповнення бази даних або швидкого прототипування.
Встановити пакет можна через Composer:
composer require directorytree/dummy
Dummy надає можливість генерувати класи з випадковими даними двома способами:
HasFactory
безпосередньо в класі, для якого потрібно згенерувати випадкові екземпляри.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();
Крім того, пакет дозволяє:
count
.Отже, у підсумку, Dummy є доповненням до стандартних класів фабрик Laravel, розширюючи підтримку для невиконаних класів, пропонуючи як варіант з трейтом, так і окремі реалізації фабрики, а також забезпечуючи зручний API для генерації екземплярів. Це універсальний інструмент для створення випадкових даних у різних частинах вашої програми.
Дізнайтеся більше про цей пакет та перегляньте вихідний код на GitHub.