acc-create-dto
Generates DTO (Data Transfer Object) for PHP 8.5. Creates immutable objects for layer boundaries, API requests/responses, and data serialization. Includes unit tests.
Best use case
acc-create-dto is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Generates DTO (Data Transfer Object) for PHP 8.5. Creates immutable objects for layer boundaries, API requests/responses, and data serialization. Includes unit tests.
Teams using acc-create-dto should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/acc-create-dto/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How acc-create-dto Compares
| Feature / Agent | acc-create-dto | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Generates DTO (Data Transfer Object) for PHP 8.5. Creates immutable objects for layer boundaries, API requests/responses, and data serialization. Includes unit tests.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# DTO Generator
Generate DTOs for transferring data between layers, API boundaries, and external systems.
## DTO Characteristics
- **Immutable**: Read-only after creation
- **No Behavior**: Pure data container, no business logic
- **Serializable**: JSON/array conversion support
- **Typed**: Strictly typed properties
- **Validated**: Input validation at creation (for requests)
- **Layer-Specific**: Different DTOs for different purposes
## DTO Types
| Type | Purpose | Location |
|------|---------|----------|
| Request DTO | API input validation | Presentation layer |
| Response DTO | API output formatting | Presentation layer |
| Command DTO | Use case input | Application layer |
| Query Result DTO | Read model output | Application layer |
| Integration DTO | External API data | Infrastructure layer |
---
## Generation Process
### Step 1: Identify DTO Type
Determine the purpose and layer for the DTO.
### Step 2: Generate DTO Class
**Path based on type:**
- Request: `src/Presentation/Api/{Context}/Request/`
- Response: `src/Presentation/Api/{Context}/Response/`
- Application: `src/Application/{Context}/DTO/`
- Integration: `src/Infrastructure/ExternalApi/{Service}/DTO/`
### Step 3: Add Conversion Methods
1. `fromArray()` — Create from raw data
2. `fromEntity()` — Create from domain entity (Response DTOs)
3. `toArray()` / `jsonSerialize()` — Serialize for output
### Step 4: Generate Tests
**Path:** `tests/Unit/{Layer}/{Context}/{Type}/`
---
## File Placement
| Type | Path |
|------|------|
| Request DTO | `src/Presentation/Api/{Context}/Request/` |
| Response DTO | `src/Presentation/Api/{Context}/Response/` |
| Application DTO | `src/Application/{Context}/DTO/` |
| Integration DTO | `src/Infrastructure/ExternalApi/{Service}/DTO/` |
| Unit Tests | `tests/Unit/{Layer}/{Context}/{Type}/` |
---
## Naming Conventions
| Type | Pattern | Example |
|------|---------|---------|
| Request | `{Action}{Entity}Request` | `CreateOrderRequest`, `UpdateUserRequest` |
| Response | `{Entity}Response` | `OrderResponse`, `UserResponse` |
| Collection | `{Entity}CollectionResponse` | `OrderCollectionResponse` |
| Application | `{Entity}DTO` | `UserDTO`, `OrderDTO` |
| Integration | `{Service}{Action}Response` | `PaymentGatewayResponse` |
---
## Quick Template Reference
### Request DTO
```php
final readonly class {Name}Request
{
public function __construct(
#[Assert\NotBlank]
public string $field,
#[Assert\Valid]
public ?NestedRequest $nested = null
) {}
public static function fromArray(array $data): self;
}
```
### Response DTO
```php
final readonly class {Name}Response implements \JsonSerializable
{
public function __construct(
public string $id,
public string $name,
/** @var array<ItemResponse> */
public array $items = []
) {}
public static function fromEntity({Entity} $entity): self;
public function jsonSerialize(): array;
}
```
### Application DTO
```php
final readonly class {Name}DTO
{
public function __construct(
public string $id,
public string $field
) {}
public static function fromRequest({Name}Request $request): self;
public function toArray(): array;
}
```
---
## Anti-patterns to Avoid
| Anti-pattern | Problem | Solution |
|--------------|---------|----------|
| Business Logic | DTO with calculations | Keep DTOs data-only |
| Mutable DTO | setters, state changes | Use readonly, immutable |
| Domain Objects | Returning entities from API | Map to Response DTO |
| Anemic Validation | No input validation | Use Assert attributes |
| Deep Nesting | Complex nested DTOs | Flatten or split |
| Missing Serialization | No JSON support | Implement JsonSerializable |
---
## References
For complete PHP templates and examples, see:
- `references/templates.md` — Request, Response, Application, Collection, Integration DTO templates
- `references/examples.md` — Order, User, Payment examples and testsRelated Skills
acc-create-value-object
Generates DDD Value Objects for PHP 8.5. Creates immutable, self-validating objects with equality comparison. Includes unit tests.
acc-create-use-case
Generates Application Use Cases for PHP 8.5. Creates orchestration services that coordinate domain objects, handle transactions, and dispatch events. Includes unit tests.
acc-create-unit-test
Generates PHPUnit unit tests for PHP 8.5. Creates isolated tests with AAA pattern, proper naming, attributes, and one behavior per test. Supports Value Objects, Entities, Services.
acc-create-test-double
Generates test doubles (Mocks, Stubs, Fakes, Spies) for PHP 8.5. Creates appropriate double type based on testing needs with PHPUnit MockBuilder patterns.
acc-create-test-builder
Generates Test Data Builder and Object Mother patterns for PHP 8.5. Creates fluent builders with sensible defaults and factory methods for test data creation.
acc-create-strategy
Generates Strategy pattern for PHP 8.5. Creates interchangeable algorithm families with context class, strategy interface, and concrete implementations. Includes unit tests.
acc-create-state
Generates State pattern for PHP 8.5. Creates state machines with context, state interface, and concrete states for behavior changes. Includes unit tests.
acc-create-specification
Generates DDD Specification for PHP 8.5. Creates reusable business rule objects for validation, filtering, and querying with composite pattern support. Includes unit tests.
acc-create-saga-pattern
Generates Saga pattern components for PHP 8.5. Creates Saga interfaces, steps, orchestrator, state management, and compensation logic with unit tests.
acc-create-retry-pattern
Generates Retry pattern for PHP 8.5. Creates resilience component with exponential backoff, jitter, and configurable retry strategies. Includes unit tests.
acc-create-responder
Generates ADR Responder classes for PHP 8.5. Creates HTTP response builders with PSR-7/PSR-17 support. Includes unit tests.
acc-create-repository
Generates DDD Repository interfaces and implementation stubs for PHP 8.5. Creates domain interfaces in Domain layer, implementation in Infrastructure.