switon / invocation
Method-level guard and interceptor contracts for managed invocations for Switon Framework
v1.0.0
2026-06-06 13:43 UTC
Requires
- php: >=8.3
Requires (Dev)
- phpstan/extension-installer: ^1.4
- phpstan/phpstan: ^2.0
- switon/testing: ^1.0
README
Switon's invocation hook contracts for method-level guards and interceptors.
This package defines the attributes and hook contracts; Invoker executes them at runtime.
Highlights
- Attribute-based hooks: guards and interceptors attach behavior directly to methods.
- Pre-execution checks: guarded methods can be examined before they run.
- Around-call wrapping: interceptors can run before, after, or on exception.
- Reusable base hook:
Interceptorcovers the common partial-lifecycle case. - Reusable invocation path: other components can share the same call flow.
Installation
composer require switon/invocation
Quick Start
use Attribute; use ReflectionMethod; use Switon\Invocation\Attribute\GuardInterface; use Switon\Http\Exception\ForbiddenException; use Switon\Http\RequestInterface; #[Attribute(Attribute::TARGET_METHOD)] final class IpGuard implements GuardInterface { public function __construct( private array $ips, ) { } public function handle(RequestInterface $request, ReflectionMethod $method): void { if (!in_array($request->ip(), $this->ips, true)) { throw ForbiddenException::of('Access denied.'); } } } final class AccountService { #[IpGuard(['127.0.0.1'])] public function deleteAction(int $id): void { } }
Docs: https://docs.switon.dev/latest/invocation
License
MIT.