Skip to content

Name Generator Service

Overview

The Name Generator service (name.generator) generates random sample names for testing and development purposes.

Service ID: name.generator Class: Drupal\name\NameGenerator Interface: Drupal\name\NameGeneratorInterface

Basic Usage

Generating Sample Names

$generator = \Drupal::service('name.generator');

// Generate 3 sample names (default)
$names = $generator->generateSampleNames();

// Generate 5 sample names
$names = $generator->generateSampleNames(5);

// Generate names for a specific field
$field_definition = $entity->getFieldDefinition('field_name');
$names = $generator->generateSampleNames(10, $field_definition);

Generated Name Structure

Each generated name is an array with all components:

$names = $generator->generateSampleNames(1);
$name = $names[0];

// Structure:
[
  'title' => 'Dr.',
  'given' => 'John',
  'middle' => 'Robert',
  'family' => 'Smith',
  'generational' => 'Jr.',
  'credentials' => 'PhD',
]

Method Reference

generateSampleNames()

Generates an array of random sample names.

public function generateSampleNames(
  $limit = 3,
  ?FieldDefinitionInterface $field_definition = NULL
);

Parameters:

  • $limit (int) - Number of names to generate (default: 3)
  • $field_definition (FieldDefinitionInterface|null) - Optional field definition to use field-specific settings

Returns: array - Array of name component arrays

loadSampleValues()

Loads sample values for a specific component.

public function loadSampleValues($component, $gender = NULL);

Parameters:

  • $component (string) - Component name ('title', 'given', 'middle', 'family', 'credentials', 'generational')
  • $gender (string|null) - Gender filter ('m' or 'f'), NULL for all

Returns: array - Array of sample values for the component

Sample Data

The generator includes built-in sample data for each component:

Title Examples

  • Dr., Mr., Mrs., Ms., Prof., Rev., etc.

Given Names

  • Gender-specific names (male and female)
  • Common first names from various cultures

Middle Names

  • Similar to given names
  • Can be empty or same as given names

Family Names

  • Common surnames
  • International surnames

Generational Suffixes

  • Jr., Sr., II, III, IV, etc.

Credentials

  • PhD, MD, DDS, JD, MBA, etc.

Configuration

Sample data comes from configuration at: /admin/config/regional/name

  • Generate Preferred (name.generate.preferred)
  • Generate Alternative (name.generate.components)
  • Generate Examples (name.generate.examples)

Use Cases

Testing

// Generate test data for unit tests
public function testNameFormatting() {
  $generator = \Drupal::service('name.generator');
  $names = $generator->generateSampleNames(10);

  $formatter = \Drupal::service('name.formatter');
  foreach ($names as $name) {
    $formatted = $formatter->format($name, 'full');
    $this->assertNotEmpty($formatted);
  }
}

Populating Demo Content

use Drupal\node\Entity\Node;

// Create demo nodes with name fields
$generator = \Drupal::service('name.generator');
$names = $generator->generateSampleNames(20);

foreach ($names as $name) {
  $node = Node::create([
    'type' => 'person',
    'title' => $name['given'] . ' ' . $name['family'],
    'field_full_name' => $name,
  ]);
  $node->save();
}

Form Placeholders

// Get a sample name for placeholder text
$generator = \Drupal::service('name.generator');
$sample = $generator->generateSampleNames(1);
$placeholder = $sample[0]['given'] . ' ' . $sample[0]['family'];

$form['name'] = [
  '#type' => 'textfield',
  '#title' => t('Full Name'),
  '#placeholder' => $placeholder,
];

Field-Specific Generation

When a field definition is provided, the generator respects field settings:

$field_definition = FieldConfig::loadByName('node', 'person', 'field_name');
$names = $generator->generateSampleNames(5, $field_definition);

// Generated names will only include enabled components
// and respect min/max length constraints

Gender-Specific Names

// Load male given names
$male_names = $generator->loadSampleValues('given', 'm');

// Load female given names
$female_names = $generator->loadSampleValues('given', 'f');

// Load all family names (no gender)
$family_names = $generator->loadSampleValues('family');

Dependency Injection

namespace Drupal\my_module\Service;

use Drupal\name\NameGeneratorInterface;

class MyTestDataService {

  protected $nameGenerator;

  public function __construct(NameGeneratorInterface $name_generator) {
    $this->nameGenerator = $name_generator;
  }

  public function createTestUsers($count) {
    $names = $this->nameGenerator->generateSampleNames($count);
    // Process names...
  }
}

See Also