attogram/router

Attogram Router for PHP 7 - small, flexible, and surprisingly powerful

v4.1.3 2020-02-15 17:00 UTC

README

Welcome to the Attogram Router for PHP 7 - small, flexible, and surprisingly powerful.

Attogram Router

Maintainability Build Status Latest Stable Version Total Downloads

Composer: composer require attogram/router

Git: git clone https://github.com/attogram/router.git

Download: https://github.com/attogram/router/archive/master.zip

License: MIT

Examples

Usage

Setup URL rewriting. For example with Apache .htaccess:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

Create your index.php. For example:

use Attogram\Router\Router;

require_once('/path/to/vendor/autoload.php');

$router = new Router();

// Allow routes
$router->allow('/', 'home');
$router->allow('/foo/bar', 'foobar');
$router->allow('/pi', 3.141);
$router->allow('/hello', function () { print 'world'; });
$router->allow('/book/?/chapter/?', function (Router $router) {
    $book = $router->getVar(0);
    $chapter = $router->getVar(1);
});

// Get the $control that matches the current request
$control = $router->match();

// If no match, $control is null
if (!$control) {
    header('HTTP/1.0 404 Not Found');
    exit;
}

// Now dispatch based on $control, in whatever manner you wish

Public Functions

allow

public function allow(string $route, $control)

  • Allow and set a control for a route
  • $route = a string with the URI list, forward-slash delimited
    • Exact routing:
      • Home: '/'
      • Page: '/foo/bar'
        • preceding and trailing slashes are optional, except for top level '/'
    • Variable routing:
      • use a question mark to denote a URI segment as a variable
      • variables are retrieved via $router->getVar(int $index)
      • Examples:
        • '/id/?' - retrieve with getVar(0)
        • '/book/?/chapter/?' - retrieve with getVar(0) and getVar(1)
        • '/foo/?/?/?' - retrieve with getVar(0), getVar(1) and getVar(2)
  • $control = anything you want
    • a string, a closure, an array, an object, an int, a float, whatever!

match

public function match()

  • Get the control for the current request, or null if no matching request

getVar

public function getVar(int $index = 0)

  • Get a URI segment variable, by index. Starting at 0.

getHome

public function getHome(): string

  • Get URL to the installation home

getHomeFull

public function getHomeFull(): string

  • Get URL to the installation home, with protocol and host

getCurrent

public function getCurrent(): string

  • Get URL to the current request

getCurrentFull

public function getCurrentFull(): string

  • Get URL to the current request, with protocol and host

setForceSlash

public function setForceSlash(bool $forceSlash)

  • Sets the optional forcing of a trailing slash on all requests
  • by default is false

redirect

redirect(string $url, int $httpResponseCode = 301, bool $exitAfter = true)

  • Redirect to a new url and exit
  • optionally set a response code (301 = permanent, 302 = moved)

getGet

public function getGet(string $name = '')

  • Get a global _GET variable, or empty string if not found

getPost

public function getPost(string $name = '')

  • Get a global _POST variable, or empty string if not found

getServer

public function getServer(string $name = '')

  • Get a global _SERVER variable, or empty string if not found

getHost

public function getHost(): string

  • Get the current hostname

getHostFull

public function getHostFull(): string

  • Get the current hostname, with protocol and host

getProtocol

public function getProtocol(): string

  • Get the current protocol: http or https