Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/attogram/router

Attogram Router for PHP 7 - small, flexible, and surprisingly powerful.
https://github.com/attogram/router

attogram-router no-dependencies one-class php-router php-router-standalone php-routing php7 router

Last synced: 4 days ago
JSON representation

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

Awesome Lists containing this project

README

        

# Attogram Router

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

[![Attogram Router](https://raw.githubusercontent.com/attogram/attogram-docs/master/router/attogram.router.250.png)](https://github.com/attogram/router)

[![Maintainability](https://api.codeclimate.com/v1/badges/95f2868eeb1ed710b794/maintainability)](https://codeclimate.com/github/attogram/router/maintainability)
[![Build Status](https://travis-ci.org/attogram/router.svg?branch=master)](https://travis-ci.org/attogram/router)
[![Latest Stable Version](https://poser.pugx.org/attogram/router/v/stable)](https://packagist.org/packages/attogram/router)
[![Total Downloads](https://poser.pugx.org/attogram/router/downloads)](https://packagist.org/packages/attogram/router)

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

* live demo:
* demo source:

## 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:

```php
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`

----