Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/MonishAMPT/fastroute-code/llms.txt

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

API routes are endpoints that return JSON data, typically used for REST APIs, mobile apps, or frontend applications.

Basic API Route Definition

API routes are defined in routes/api.php and return a function that accepts a RouteCollector instance:
routes/api.php
<?php

use FastRoute\RouteCollector;

return function (RouteCollector $r) {
    // Your routes go here
};

Adding Routes

Simple Routes

Use addRoute() to define routes with specific HTTP methods:
routes/api.php
$r->addRoute('GET', '/api/test', 'test_get');
$r->addRoute('POST', '/api/test', 'test_post');
$r->addRoute('GET', '/api/items', 'items_get');
$r->addRoute('POST', '/api/items', 'items_post');

HTTP Method Shortcuts

FastRoute provides convenient methods for common HTTP verbs:
routes/api.php
$r->get('/api/test/{id:\d+}/test/{id2:\d+}', 'getid');
$r->delete('/api/test/delete/{id:\d+}', 'delete');
$r->post('/api/test/{test:\d+}', 'postdata');
The {id:\d+} syntax defines a route parameter that only matches digits. The pattern after the colon is a regular expression.

Route Parameters

Capture dynamic values from the URL using route parameters:
routes/api.php
// Single parameter
$r->delete('/api/test/delete/{id:\d+}', 'delete');

// Multiple parameters
$r->get('/api/test/{id:\d+}/test/{id2:\d+}', 'getid');

// Parameter in POST route
$r->post('/api/test/{test:\d+}', 'postdata');
The handler function receives parameters as an array:
index.php
function getid($var) {
    if (is_array($var)) {
        $id = $var['id'];
        $id2 = $var['id2'];
    }
    echo "given id: ".$id;
    echo "given id: ".$id2;
}

Route Groups

Group related routes with a common prefix using addGroup():
routes/api.php
$r->addGroup('/api/projects', function (FastRoute\RouteCollector $r) use($obj) {
    $r->get('/testing/test', function() use($obj) {
        $obj->hello();
    });
    $r->get("/", function() use($obj) {
        $obj->display(1);
    });
});

$r->addGroup('/api/tasks', function (FastRoute\RouteCollector $r) use($obj) {
    $r->get("/", function() use($obj) {
        $obj->display(2);
    });
});
Route groups are perfect for organizing endpoints by resource or API version.

Using Class-Based Handlers

You can use class methods as handlers by including the class and passing the instance:
routes/api.php
include __DIR__."/../v1/test.php";
$obj = new testing;

return function (RouteCollector $r) {
    $obj = new testing;
    
    $r->get('/api/class', function() use($obj) {
        $obj->hello();
    });
};

Inline Closure Handlers

For simple logic, you can define handlers directly in the route definition:
routes/api.php
$r->get('/', function() {
    require __DIR__ . '/../views/main.php';
});

$r->get('/about', function() {
    require __DIR__ . '/../views/about.php';
});

Content-Type Headers

The main index.php file automatically sets the appropriate content type based on the route:
index.php
if (strpos($uri, '/api/') === 0) {
    header('Content-Type: application/json; charset=utf-8');
} else {
    header('Content-Type: text/html; charset=utf-8');
}
All routes starting with /api/ will automatically return JSON content type. Make sure your handlers return valid JSON.

Complete Example

Here’s a complete example from the source code:
routes/api.php
<?php

use FastRoute\RouteCollector;
use FastRoute\ConfigureRoutes;
include __DIR__."/../v1/test.php";
$obj = new testing;

return function (RouteCollector $r) {
    $obj = new testing;

    $r->addGroup('/api/projects', function (FastRoute\RouteCollector $r) use($obj) {
        $r->get('/testing/test', function() use($obj) {
            $obj->hello();
        });
        $r->get("/", function() use($obj) {
            $obj->display(1);
        });
    });
    
    $r->addGroup('/api/tasks', function (FastRoute\RouteCollector $r) use($obj) {
        $r->get("/", function() use($obj) {
            $obj->display(2);
        });
    });

    $r->addRoute('GET', '/api/test', 'test_get');
    $r->addRoute('POST', '/api/test', 'test_post');
    $r->addRoute('GET', '/api/items', 'items_get');
    $r->addRoute('POST', '/api/items', 'items_post');
    $r->addRoute('GET', '/api/items/1', 'item_get_1');

    $r->get('/api/test/{id:\d+}/test/{id2:\d+}', 'getid');
    $r->delete('/api/test/delete/{id:\d+}', 'delete');
    $r->post('/api/test/{test:\d+}', 'postdata');

    $r->get('/api/class', function() use($obj) {
        $obj->hello();
    });
};

Next Steps

Route Handlers

Learn about different handler types

Web Routes

Create routes that return HTML

Build docs developers (and LLMs) love