Skip to main content

Intercepting Request

Note: For comprehensive examples and use cases, see the Route Interceptors section in the PHP Attributes documentation.

Request intercepting allows you to execute code before or after a route handler using PHP 8 attributes. This is useful for route-specific validation, logging, transformation, or other cross-cutting concerns at the individual route level.

Interfaces

Interceptors are PHP 8 attributes that implement one of two interfaces:

BeforeRouteInterface

Executes before the route handler:

<?php
namespace My;

use Attribute;
use ByJG\RestServer\Attributes\BeforeRouteInterface;
use ByJG\RestServer\HttpRequest;
use ByJG\RestServer\HttpResponse;

#[Attribute(Attribute::TARGET_METHOD)]
class MyBeforeProcess implements BeforeRouteInterface
{
public function processBefore(HttpResponse $response, HttpRequest $request)
{
// Validation, authentication, logging, etc.
}
}

AfterRouteInterface

Executes after the route handler:

<?php
namespace My;

use Attribute;
use ByJG\RestServer\Attributes\AfterRouteInterface;
use ByJG\RestServer\HttpRequest;
use ByJG\RestServer\HttpResponse;

#[Attribute(Attribute::TARGET_METHOD)]
class MyAfterProcess implements AfterRouteInterface
{
public function processAfter(HttpResponse $response, HttpRequest $request)
{
// Response transformation, logging, cleanup, etc.
}
}

Usage

Apply interceptor attributes to route methods:

<?php
namespace My;

use ByJG\RestServer\Attributes\RouteDefinition;
use ByJG\RestServer\HttpRequest;
use ByJG\RestServer\HttpResponse;

class ClassName
{
#[RouteDefinition('GET', '/route1')]
#[MyBeforeProcess()]
public function someMethod(HttpResponse $response, HttpRequest $request)
{
$response->write(['result' => 'ok']);
}
}

For complete examples including:

  • Built-in interceptors (RequireAuthenticated, RequireRole)
  • Multiple interceptors on a single route
  • Interceptors with parameters
  • Real-world use cases

See the Route Interceptors section in the PHP Attributes documentation.

Combining Middleware and Request Intercepting

Middleware operates at the HTTP server level, affecting all routes or specific route patterns, while request intercepting operates at the route level using PHP attributes. Both can be used together to provide a comprehensive request handling pipeline.

  • Use Middleware for server-wide or pattern-based functionality (authentication, CORS, static files)
  • Use Request Intercepting for route-specific functionality