Routing & Parameter Injection

ZealPHP uses reflection to inject route parameters, $request, $response, and $app into handlers by name — no annotations, no containers.

Route types

MethodExampleUse when
route()/users/{id}Standard URL with named segments
nsRoute()/admin/usersGroup routes under a namespace prefix
nsPathRoute()/api/v1/users/listNamespace + catch-all last segment (includes slashes)
patternRoute()/raw/(?P<rest>.*)Full regex control
ws()/ws/chatWebSocket endpoint

Parameter injection — every case

All panels below auto-run against the live server. The handler signature determines what gets injected.

GET URL param only
$app->route('/users/{id}', function($id) {
    return ['id' => $id];
});
LIVE OUTPUT Click Run →
GET URL param + $request
$app->route('/users/{id}', function($id, $request) {
    return ['id' => $id, 'method' => $request->server['REQUEST_METHOD']];
});
LIVE OUTPUT Click Run →
GET URL param + $response
$app->route('/users/{id}', function($id, $response) {
    $response->header('X-User-Id', $id);
    return ['id' => $id, 'response_class' => get_class($response)];
});
LIVE OUTPUT Click Run →
GET $request only
$app->route('/info', function($request) {
    return ['method' => $request->server['REQUEST_METHOD'],
            'uri'    => $request->server['REQUEST_URI']];
});
LIVE OUTPUT Click Run →
GET All: $id + $request + $response
$app->route('/full/{id}', function($id, $request, $response) {
    $response->header('X-Injected', 'yes');
    return ['id' => $id, 'method' => $request->server['REQUEST_METHOD'],
            'response_class' => get_class($response)];
});
LIVE OUTPUT Click Run →
GET Default param value
$app->route('/paged/{id}/{page?}', function($id, $page = 1) {
    return ['id' => $id, 'page' => $page];  // page defaults to 1
});
LIVE OUTPUT Click Run →
GET Default overridden by URL
// Same handler — page is 5 from URL
$app->route('/paged/{id}/{page}', function($id, $page = 1) {
    return ['id' => $id, 'page' => $page];
});
LIVE OUTPUT Click Run →

Live route type demos

GET nsRoute — /demo/route/ns/items
$app->nsRoute('demo', '/route/ns/items', function() {
    return ['route_type' => 'nsRoute', 'prefix' => 'demo'];
});
LIVE OUTPUT Click Run →
GET nsPathRoute — catches full path after prefix
$app->nsPathRoute('demo/route/ns-path', '{path}', function($path) {
    return ['route_type' => 'nsPathRoute', 'captured' => $path];
});
LIVE OUTPUT Click Run →
GET patternRoute — regex match
$app->patternRoute('/demo/route/pattern', function() {
    return ['route_type' => 'patternRoute'];
});
LIVE OUTPUT Click Run →