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.
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¶
- Formatter Service - Format generated names
- Code Examples - More usage examples
- API Overview - Module architecture