Generates Builder pattern for PHP 8.4. Creates step-by-step object construction with fluent interface and validation. Includes unit tests.
From accnpx claudepluginhub dykyi-roman/awesome-claude-code --plugin accThis skill uses the workspace's default tool permissions.
references/examples.mdreferences/templates.mdCreates Builder pattern infrastructure for step-by-step construction of complex objects.
| Scenario | Example |
|---|---|
| Many constructor parameters | Order with 10+ fields |
| Optional parameters | Email with optional CC, BCC |
| Complex validation | Build-time validation |
| Step-by-step construction | Query building |
| Multiple representations | Different order types |
Determine:
Path: src/Domain/{BoundedContext}/Builder/
{Name}BuilderInterface.php — Builder contract{Name}Builder.php — Concrete builder implementationBuilderValidationException.php — Validation exception{Name}Director.php — Optional director for common buildsPath: tests/Unit/Domain/{BoundedContext}/Builder/
{Name}BuilderTest.php — Builder functionality tests| Component | Path |
|---|---|
| Builder Interface | src/Domain/{BoundedContext}/Builder/ |
| Concrete Builder | src/Domain/{BoundedContext}/Builder/ |
| Director | src/Domain/{BoundedContext}/Builder/ |
| Exception | src/Domain/{BoundedContext}/Builder/ |
| Unit Tests | tests/Unit/Domain/{BoundedContext}/Builder/ |
| Component | Pattern | Example |
|---|---|---|
| Interface | {Name}BuilderInterface | OrderBuilderInterface |
| Concrete Builder | {Name}Builder | OrderBuilder |
| Director | {Name}Director | OrderDirector |
| Exception | BuilderValidationException | BuilderValidationException |
| Test | {ClassName}Test | OrderBuilderTest |
interface {Name}BuilderInterface
{
public function with{Property1}({Type1} $value): self;
public function with{Property2}({Type2} $value): self;
public function build(): {Product};
public function reset(): self;
}
final class {Name}Builder implements {Name}BuilderInterface
{
private ?{Type1} ${property1} = null;
private ?{Type2} ${property2} = null;
private array $errors = [];
public function with{Property1}({Type1} $value): self
{
$this->{property1} = $value;
return $this;
}
public function build(): {Product}
{
$this->validate();
if ($this->errors !== []) {
throw new BuilderValidationException($this->errors);
}
return new {Product}(...);
}
public function reset(): self
{
$this->{property1} = null;
$this->errors = [];
return $this;
}
}
final readonly class {Name}Director
{
public function __construct(private {Name}BuilderInterface $builder) {}
public function buildMinimal{Name}(/* required params */): {Product}
{
return $this->builder
->reset()
->with{Required1}($value1)
->build();
}
public function buildFull{Name}(/* all params */): {Product}
{
return $this->builder
->reset()
->with{Property1}($value1)
->with{Property2}($value2)
->build();
}
}
// Direct builder usage
$order = (new OrderBuilder())
->forCustomer($customerId)
->withShippingAddress($address)
->addItem($item1)
->addItem($item2)
->withDiscountCode('SAVE10')
->build();
// Using Director
$director = new OrderDirector(new OrderBuilder());
$minimalOrder = $director->buildMinimalOrder($customerId, $address, $item);
$giftOrder = $director->buildGiftOrder($customerId, $shipping, $billing, $items, 'Happy Birthday!');
| Anti-pattern | Problem | Solution |
|---|---|---|
| No Validation | Invalid objects built | Validate in build() |
| Mutable Product | Product can change after build | Return immutable objects |
| Missing Reset | Builder state persists | Add reset() method |
| Too Many Steps | Hard to use | Use Director or defaults |
| No Fluent Interface | Verbose client code | Return self from setters |
For complete PHP templates and examples, see:
references/templates.md — Builder, QueryBuilder templatesreferences/examples.md — OrderBuilder, EmailBuilder examples and testsProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.