switon/invocation

Method-level guard and interceptor contracts for managed invocations for Switon Framework

Maintainers

Package info

github.com/switon-php/invocation

Documentation

pkg:composer/switon/invocation

Statistics

Installs: 32

Dependents: 5

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-06-06 13:43 UTC

This package is auto-updated.

Last update: 2026-06-07 02:01:12 UTC


README

CI PHP 8.3+

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: Interceptor covers 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.