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/invocationuse 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
MIT.