php-builder-generator

Quick Start Guide

Get up and running with PHP Builder Generator in just a few minutes!

Installation

  1. Install as a dev dependency:
    composer require --dev maxbeckers/php-builder-generator
    
  2. Allow the Composer plugin:
    {
      "config": {
        "allow-plugins": {
          "maxbeckers/php-builder-generator": true
        }
      }
    }
    
  3. Add the generated builders to your autoload:
    {
      "autoload": {
        "psr-4": {
          "App\\": ["src/", "generated/php-builder-generator/App/"]
        }
      }
    }
    

Your First Builder

1. Create the Config File

Create php-builder-generator.php in your project root:

<?php
// php-builder-generator.php

use MaxBeckers\PhpBuilderGenerator\Config\PhpBuilderGeneratorConfig;

return PhpBuilderGeneratorConfig::configure()
    ->scanDirectory('src/Model')
    ->outputDir('generated/php-builder-generator/');

2. Create a Class

No imports from this library needed β€” your class is completely clean:

<?php
// src/Model/User.php

namespace App\Model;

class User
{
    public function __construct(
        public string $name,
        public string $email,
        public ?int $age = null,
        public array $roles = [],
        public bool $active = true
    ) {}
}

3. Generate the Builder

Builders are automatically generated during composer install/update, or run manually:

./vendor/bin/php-builder-generator

4. Use Your Builder

<?php

use App\Model\UserBuilder; // Auto-generated!

$user = UserBuilder::builder()
    ->name('John Doe')
    ->email('john@example.com')
    ->age(30)
    ->roles(['admin', 'user'])
    ->active(true)
    ->build();

echo $user->name; // "John Doe"

That’s It! πŸŽ‰

You now have a fully functional builder for your User class with:

Common Patterns

Explicit class list

use MaxBeckers\PhpBuilderGenerator\Config\BuilderConfig;
use MaxBeckers\PhpBuilderGenerator\Config\PhpBuilderGeneratorConfig;

return PhpBuilderGeneratorConfig::configure()
    ->class(App\Model\User::class)
    ->class(App\Model\Company::class, new BuilderConfig(fluent: false));

Directory scan with defaults

return PhpBuilderGeneratorConfig::configure()
    ->scanDirectory('src/DTO', new BuilderConfig(fluent: true))
    ->scanDirectory('src/Model');

With Validation

// src/Model/Email.php β€” no imports from this library
class Email
{
    public function __construct(public string $address)
    {
        if (!filter_var($address, FILTER_VALIDATE_EMAIL)) {
            throw new InvalidArgumentException('Invalid email address');
        }
    }
}

Next Steps