About Documentation Github

Routing Requests

To set up a certain route in Pagenode, you simply call the route() function with the path and a callback function that will handle this route.

route('/my-path', function() {
    // Handle all requests to /my-path

Once you have defined all routes, you can call the dispatch() function. If you don't provide a path, the path will be determined from the current request URL (relative to your index.php). This will probe all routes in order to find a matching route.


Note that only the path component of the URL will be matched against your routes by default. I.e. the URL will still match the route defined above.

If no matching route can be found, a default 404 handler will be called. It is good practise to define your own 404 handler with a simple catch-all route:

route('/*', function() {
    // Handle all requests that didn't match any previous route

Routes can have any number of parameters. Parameters are defined by an identifier in curly braces (e.g {name}) in your route. These parameters will be passed to your callback function. A parameter can be any value not containing a / (forward slash). E.g.:

route('/foo/{bar}/{baz}', function($bar, $baz) {
    echo htmlSpecialChars("bar: $bar, baz: $baz");

If a parameter is defined in your route, it must match something. E.g. the route above will match /foo/lorem/ipsum but not /foo/lorem or /foo/lorem/ipsum/dolor.

If you determine that a request cannot be fulfilled in a route handler, you can simply return false and the request will be passed on to your /* handler or if this fails as well, to the default 404 handler.

route('/blog/{keyword}', function($keyword) {
    $node = select('nodes/blog/')->one(['keyword' => $keyword]);
    if (!$node) {
        return false; // Will be handled by the /* route



To re-route a request internally you can call reroute(). This will not redirect the user, but just internally forward the request.

reroute('/', '/my-path');

Up Next: Presenting »

© 2024 Dominic Szablewski – rendered in (2.04ms)