Routing & Parameter Injection
ZealPHP uses reflection to inject route parameters, $request, $response, and $app into handlers by name — no annotations, no containers.
Route types
| Method | Example | Use when |
|---|---|---|
route() | /users/{id} | Standard URL with named segments |
nsRoute() | /admin/users | Group routes under a namespace prefix |
nsPathRoute() | /api/v1/users/list | Namespace + catch-all last segment (includes slashes) |
patternRoute() | /raw/(?P<rest>.*) | Full regex control |
ws() | /ws/chat | WebSocket 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 →