Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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.
- Host: GitHub
- URL: https://github.com/attogram/router
- Owner: attogram
- License: mit
- Created: 2017-12-23T21:09:04.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2020-06-15T12:56:28.000Z (over 4 years ago)
- Last Synced: 2024-12-16T22:43:46.422Z (about 1 month ago)
- Topics: attogram-router, no-dependencies, one-class, php-router, php-router-standalone, php-routing, php7, router
- Language: PHP
- Homepage: https://getitdaily.com/attogram-router/
- Size: 233 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
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`
----