Switon's invocation hook contracts for method-level guards and interceptors.
This package defines the attributes and hook contracts; Invoker executes them at runtime.
- 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.
composer require switon/invocationuseAttribute;
useReflectionMethod;
useSwiton\Invocation\Attribute\GuardInterface;
useSwiton\Http\Exception\ForbiddenException;
useSwiton\Http\RequestInterface;
#[Attribute(Attribute::TARGET_METHOD)]
finalclass IpGuard implements GuardInterface
{
publicfunction__construct(
privatearray$ips,
) {
}
publicfunctionhandle(RequestInterface$request, ReflectionMethod$method): void
{
if (!in_array($request->ip(), $this->ips, true)) {
throw ForbiddenException::of('Access denied.');
}
}
}
finalclass AccountService
{
#[IpGuard(['127.0.0.1'])]
publicfunctiondeleteAction(int$id): void
{
}
}Docs: https://docs.switon.dev/latest/invocation
MIT.