Skip to content
master
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
src
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Attogram Router

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