apex/router

Light weight, straight forward router

1.0.1 2024-01-11 16:34 UTC

This package is auto-updated.

Last update: 2024-04-11 17:11:31 UTC


README

Light weight, easy to understand and use HTTP router that also comes fully and optionally integrated with the Syrus template engine, essentially turning it into a cool little micro framework. Not meant for heavy lifting, but excellent if you just need something well structured up and running quickly. Supports the following:

  • Simplistic YAML file to define routes which supports partial and full matching paths, dynamic path parameters, and multiple hostnames.
  • Fully supports PSR15 and PSR7, and uses middleware classes for forwarding of all HTTP requests.
  • All middleware classes fully support both, attribute and constructor based dependancy injection via the Apex Container.
  • Optional built-in integration with the Syrus Template Engine, allowing for auto-routing / mapping of templates, a separate PHP file with each template, and HTTP method-specific PHP functions within each PHP class.

Installation

Install via Composer with:

composer require apex/router

Table of Contents

  1. Base Configuration
  2. Routes YAML File
  3. Middleware Classes
  4. Router Functions
  5. Syrus Template Engine Integration

Basic Usage

For a quick example, check the example.php script that comes with this package.

First, add some routes to your YAML file:

routes:
    default: Syrus
    members: MembersArea
    contact$: ContactPage
    "product/:category/:product_id": PathParamsExample

use Apex\Router\Router;
use Nyholm\Psr7Server\ServerRequestCreator;
use Nyholm\Psr7\Factory\Psr17Factory;
use League\Uri\Http;

require_once("./vendor/autoload.php");

// Define a uri to test with
$uri = Http::createFromString("http://example.com/category/cars");

// Generate PSR7 compliant server request object
$factory = new Psr17Factory();
$creator = new ServerRequestCreator($factory, $factory, $factory, $factory);
$request = $creator->fromGlobals()->withUri($uri);

// Handle http request via router
$router = new Router();
$response = $router->handle($request);

// If this is handled via Syrus auto-routing, the 
// HTML would have already been output to the user. 
// Otherwise, $response is a PSR7 ResponseInterface object.

// Alternatively, we can use the lookup method
$response = $router->lookup($request);

// This simply determines the route, obtains any dynamic path parameters, 
// and instantiates the middleware, but does not execute the process() method within it.
// Instead, $response is a Apex\Router\RouterResponse instance.

// Now, to execute the middle wear and output:
$router->execute($response, true);

Support

If you have any questions, issues or feedback, please feel free to drop a note on the ApexPl Reddit sub for a prompt and helpful response.