Generates Adapter pattern for PHP 8.4. Converts incompatible interfaces, wraps legacy code and external libraries. 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 Adapter pattern infrastructure for converting incompatible interfaces into expected ones.
| Scenario | Example |
|---|---|
| Legacy code integration | Wrap old API with new interface |
| Third-party library wrapping | Stripe SDK, AWS SDK adapters |
| Interface standardization | Multiple payment gateways with unified interface |
| Backward compatibility | Support old and new interfaces |
Path: src/Domain/{BoundedContext}/
{Name}Interface.php — Expected interface contractPath: src/Infrastructure/{BoundedContext}/Adapter/
{Provider}{Name}Adapter.php — Converts adaptee to target interface{Legacy}{Name}Adapter.php — Wraps legacy code{External}{Name}Adapter.php — Wraps third-party library{AdapterName}Test.php — Adapter behavior verification| Component | Path |
|---|---|
| Target Interface | src/Domain/{BoundedContext}/ |
| Adapter | src/Infrastructure/{BoundedContext}/Adapter/ |
| Adaptee (existing) | External library or legacy code |
| Unit Tests | tests/Unit/Infrastructure/{BoundedContext}/Adapter/ |
| Component | Pattern | Example |
|---|---|---|
| Target Interface | {Name}Interface | PaymentGatewayInterface |
| Adapter | {Provider}{Name}Adapter | StripePaymentGatewayAdapter |
| Test | {ClassName}Test | StripePaymentGatewayAdapterTest |
interface {Name}Interface
{
public function {operation}({params}): {returnType};
}
final readonly class {Provider}{Name}Adapter implements {Name}Interface
{
public function __construct(
private {Adaptee} $adaptee
) {}
public function {operation}({params}): {returnType}
{
// Translate params to adaptee format
$adapteeResult = $this->adaptee->{adapteeMethod}({adapteeParams});
// Convert result to target format
return {convertedResult};
}
}
// Stripe SDK is the adaptee
$stripeClient = new \Stripe\StripeClient($apiKey);
// Adapter makes it compatible with our interface
$paymentGateway = new StripePaymentGatewayAdapter($stripeClient);
// Use through our domain interface
$result = $paymentGateway->charge($amount, $token);
| Adapter | Purpose |
|---|---|
| PaymentGatewayAdapter | Wrap Stripe, PayPal, Square APIs |
| StorageAdapter | Wrap AWS S3, Google Cloud Storage |
| MessengerAdapter | Wrap Slack, Discord, Telegram APIs |
| EmailAdapter | Wrap SendGrid, Mailgun, AWS SES |
| CacheAdapter | Wrap Redis, Memcached, APCu |
| LoggerAdapter | Wrap Monolog, Syslog, custom loggers |
| Anti-pattern | Problem | Solution |
|---|---|---|
| Leaky Adapter | Exposing adaptee details | Return only target interface types |
| Multiple Responsibilities | Adapter doing business logic | Keep adapters focused on translation |
| Tight Coupling | Adapter depends on concrete adaptee | Accept interface when possible |
| Heavy Translation | Complex conversions in adapter | Extract translator services |
| Missing Error Handling | Adaptee exceptions leak | Catch and convert to domain exceptions |
For complete PHP templates and examples, see:
references/templates.md — Target Interface, Adapter templates for payment, storage, messagingreferences/examples.md — Stripe, PayPal, AWS S3, legacy user adapters with unit 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.