Generates Proxy pattern for PHP 8.4. Controls access, adds lazy loading, caching, logging. 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 Proxy pattern infrastructure for controlling access to objects.
| Scenario | Example |
|---|---|
| Lazy initialization | Load expensive resources on first access |
| Access control | Check permissions before delegating |
| Caching | Cache results of expensive operations |
| Logging | Log calls to real subject |
Path: src/Domain/{BoundedContext}/
{Name}Interface.php — Operations contractPath: src/Infrastructure/{BoundedContext}/Proxy/
Lazy{Name}Proxy.php — Lazy initializationCaching{Name}Proxy.php — Result cachingAccessControl{Name}Proxy.php — Permission checksLogging{Name}Proxy.php — Call logging{ProxyName}Test.php — Proxy behavior verification| Component | Path |
|---|---|
| Subject Interface | src/Domain/{BoundedContext}/ |
| Real Subject | src/Domain/ or src/Infrastructure/ |
| Proxy | src/Infrastructure/{BoundedContext}/Proxy/ |
| Unit Tests | tests/Unit/Infrastructure/{BoundedContext}/Proxy/ |
| Component | Pattern | Example |
|---|---|---|
| Subject Interface | {Name}Interface | RepositoryInterface |
| Real Subject | {Name} | UserRepository |
| Proxy | {Type}{Name}Proxy | LazyUserRepositoryProxy |
| Test | {ClassName}Test | LazyUserRepositoryProxyTest |
final class {Type}{Name}Proxy implements {Name}Interface
{
private ?{Name}Interface $realSubject = null;
public function __construct(
private \Closure $factory
) {}
public function {operation}({params}): {returnType}
{
{beforeBehavior}
$result = $this->getRealSubject()->{operation}({args});
{afterBehavior}
return $result;
}
private function getRealSubject(): {Name}Interface
{
if ($this->realSubject === null) {
$this->realSubject = ($this->factory)();
}
return $this->realSubject;
}
}
// Lazy loading proxy
$repository = new LazyUserRepositoryProxy(
fn() => new UserRepository($connection)
);
// Real subject created only on first call
$user = $repository->findById($id);
| Proxy | Purpose |
|---|---|
| LazyLoadingProxy | Defer expensive object creation |
| CachingProxy | Cache method results |
| AccessControlProxy | Check permissions before execution |
| LoggingProxy | Log all method calls |
| MetricsProxy | Collect performance metrics |
| RetryProxy | Retry failed operations |
| Anti-pattern | Problem | Solution |
|---|---|---|
| Proxy != Real Subject | Behavior differs | Proxy must be transparent |
| Heavy Proxy | Too much logic | Keep proxies focused |
| Missing Interface | Can't substitute proxy | Use shared interface |
| Leaky State | Proxy state affects behavior | Keep proxies stateless when possible |
| Multiple Responsibilities | Proxy does many things | One proxy, one concern |
For complete PHP templates and examples, see:
references/templates.md — Lazy loading, caching, access control proxy templatesreferences/examples.md — Repository, service proxies 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.