Get up and running with PHP Builder Generator in just a few minutes!
composer require --dev maxbeckers/php-builder-generator
{
"config": {
"allow-plugins": {
"maxbeckers/php-builder-generator": true
}
}
}
{
"autoload": {
"psr-4": {
"App\\": ["src/", "generated/php-builder-generator/App/"]
}
}
}
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/');
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
) {}
}
Builders are automatically generated during composer install/update, or run manually:
./vendor/bin/php-builder-generator
<?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"
You now have a fully functional builder for your User class with:
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));
return PhpBuilderGeneratorConfig::configure()
->scanDirectory('src/DTO', new BuilderConfig(fluent: true))
->scanDirectory('src/Model');
// 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');
}
}
}