wieni / wmmodel_factory
Define factories that allow you to generate entities with certain fields, filled with random data
Installs: 4 957
Dependents: 1
Suggesters: 0
Security: 0
Stars: 0
Watchers: 8
Forks: 1
Open Issues: 4
Type:drupal-module
Requires
- php: ^7.3 || ^8.0
- drupal/core: ^9.3 || ^10
- fakerphp/faker: ^1.10
Requires (Dev)
- ergebnis/composer-normalize: ^2.0
- wieni/wmcodestyle: ^1.3
This package is auto-updated.
Last update: 2024-12-07 12:27:01 UTC
README
Define factories that allow you to generate entities with certain fields, filled with random data
Why?
- The built-in way to generate random entities,
ContentEntityStorageInterface::createWithSampleValues
, is lacking in a lot of ways: it is untested, has a lot of issues and is not very flexible. - Use the same API as Laravel's model factories
- Generate realistic content tailored to the entity type using the Faker library.
Installation
This package requires PHP 7.1 and Drupal 8 or higher. It can be installed using Composer:
composer require wieni/wmmodel_factory
How does it work?
Creating factories
Factories are the classes responsible for generating the data that will be used to fill the fields of the newly created entity.
Factories for certain entity type / bundle combinations can be added by
creating plugins with the @EntityFactory
annotation, defining the entity
type ID in the entity_type
parameter and the bundle in the bundle
parameter. The class should also implement the EntityFactoryInterface
interface.
It's also possible to create multiple factories for the same entity type /
bundle combination by giving them unique names through the name
annotation parameter.
Example
<?php namespace Drupal\your_module\Entity\ModelFactory\Factory\Node; use Drupal\your_module\Entity\Meta\Meta; use Drupal\wmmodel_factory\EntityFactoryBase; /** * @EntityFactory( * entity_type = "node", * bundle = "page" * ) */ class PageFactory extends EntityFactoryBase { public function make(): array { return [ 'title' => $this->faker->sentence(4), 'menu_link' => null, 'field_meta' => [ 'entity' => $this->faker->entity(Meta::class), ], 'field_intro' => $this->faker->optional()->text(320), ]; } }
Creating states
States allow you to define discrete modifications that can be applied to
your model factories in any combination. For example, your Page model might
have an unpublished
state that modifies one of its default attribute values.
States for certain entity type / bundle combinations can be added by
creating plugins with the @EntityState
annotation, defining the entity
type ID in the entity_type
parameter, the bundle in the bundle
parameter and a unique name in the name
parameter. The class should also
implement the EntityStateInterface
interface.
Example
<?php namespace Drupal\your_module\Entity\ModelFactory\State\Node; use Drupal\wmmodel_factory\EntityStateBase; /** * @EntityState( * name = "unpublished", * entity_type = "node", * ) */ class UnpublishedState extends EntityStateBase { public function make(): array { return [ 'status' => 0, ]; } }
Generating entities
TODO
Changelog
All notable changes to this project will be documented in the CHANGELOG file.
Security
If you discover any security-related issues, please email security@wieni.be instead of using the issue tracker.
License
Distributed under the MIT License. See the LICENSE file for more information.