Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.apivalk.com/llms.txt

Use this file to discover all available pages before exploring further.

Looking for a step-by-step walkthrough? The Configure Apivalk how-to covers the same ground with a recommended middleware order and a section on growing your configuration as the app expands.

Basic Setup

To bootstrap Apivalk, you need to create an instance of ApivalkConfiguration and pass it to the Apivalk core class.
use apivalk\apivalk\Apivalk;
use apivalk\apivalk\ApivalkConfiguration;
use apivalk\apivalk\Cache\FilesystemCache;
use apivalk\apivalk\Router\Router;
use apivalk\apivalk\Util\ClassLocator;

// 1. Setup Router with auto-discovery
$classLocator = new ClassLocator(__DIR__ . '/src/Http/Controller', 'App\\Http\\Controller');
$routerCache = new FilesystemCache(__DIR__ . '/cache');
$router = new Router($classLocator, $routerCache);

// 2. Create Base Configuration
$configuration = new ApivalkConfiguration($router, null, [ApivalkExceptionHandler::class, 'handle']);

// 3. Add Middlewares
$configuration->getMiddlewareStack()->add(new SanitizeMiddleware());
$configuration->getMiddlewareStack()->add(new RequestValidationMiddleware());

// 4. Run the App
$apivalk = new Apivalk($configuration);
$response = $apivalk->run();

// 5. Render response
$apivalk->getRenderer()->render($response);

Dependency Injection (PSR-11 Container)

Apivalk supports any PSR-11 compliant container (like PHP-DI, Symfony DI, etc.). This allows you to inject dependencies into your controllers.
use apivalk\apivalk\ApivalkConfiguration;
use App\ContainerFactory; // Your own factory

$container = ContainerFactory::create();
$config = new ApivalkConfiguration(
    $router,
    null, // default renderer (JsonRenderer)
    null, // default exception handler
    $container
);
When a container is provided, Apivalk will use it to instantiate your controllers. If no container is provided, it will simply use new $controllerClass().

Localization

You can configure locale support by passing a LocalizationConfiguration to ApivalkConfiguration. This enables automatic locale resolution from the Accept-Language header on every request.
use apivalk\apivalk\ApivalkConfiguration;
use apivalk\apivalk\Http\i18n\Locale;
use apivalk\apivalk\Http\i18n\LocalizationConfiguration;

$localization = new LocalizationConfiguration(Locale::en());
$localization->addSupportedLocale(Locale::en());
$localization->addSupportedLocale(Locale::de());
$localization->addSupportedLocale(Locale::deDe());

$config = new ApivalkConfiguration(
    $router,
    null,              // renderer
    null,              // exception handler
    null,              // container
    null,              // logger
    $localization      // localization configuration
);
If no LocalizationConfiguration is provided, Apivalk defaults to English (en). See the Localization guide for full details.

Middleware Stack

You can register global middlewares via the configuration.
$config->getMiddlewareStack()->add(new MyAuthMiddleware());

Exception Handling

You can provide a custom exception handler callable to format error responses.
use apivalk\apivalk\ApivalkConfiguration;
use apivalk\apivalk\ApivalkExceptionHandler;

$config = new ApivalkConfiguration(
    $router,
    null,
    [ApivalkExceptionHandler::class, 'handle']
);
For more details, see the Exception Handling documentation.