dev-master
9999999-devSimple Router
MIT
The Requires
- php >=5.3
The Development Requires
by Jesse Donat
Wallogit.com
2017 © Pedro Peláez
Simple Router
A Simple Collection of Routers, (*2)
Install the latest version with:, (*3)
composer require 'corpus/router'
<?php
require __DIR__ . '/../vendor/autoload.php';
// $_SERVER => ['REQUEST_METHOD' => [ 'method' => 'POST' ]]
$router = new \Corpus\Router\HttpRouter('\\Corpus\\Controllers', $_SERVER);
$route = $router->match('test/controller:action');
// $route =
// [
// 'controller' => '\\Corpus\\Controllers\\test\\controller',
// 'action' => 'action',
// 'options' => [],
// 'request' => [ 'method' => 'POST' ],
// ]
// ----------------
$route = $router->match('test/controller?query=whatwhat');
// $route =
// [
// 'controller' => '\\Corpus\\Controllers\\test\\controller',
// 'action' => NULL,
// 'options' => [ 'query' => 'whatwhat' ],
// 'request' => [ 'method' => 'POST' ],
// ]
// ----------------
$route = $router->match($_SERVER['REQUEST_URI']);
// $route = Current Request
// ----------------
$url = $router->generate('myNamespace\\admin', 'index');
// $url = '/myNamespace/admin:index'
// ----------------
$url = $router->generate('\\Corpus\\Controllers\\myNamespace\\admin', 'index');
// $url = '/myNamespace/admin:index'
// ----------------
try {
$url = $router->generate('\\Invalid\\Absolute\\Controller', 'index');
}catch (\Corpus\Router\Exceptions\NonRoutableException $e) {
$url = 'fail';
}
// $url = 'fail'
<?php
namespace Corpus\Router;
class HttpRouter {
public const ACTION = 'action';
public const CONTROLLER = 'controller';
public const OPTIONS = 'options';
}
function __construct(string $rootNamespace [, array $server = []])
$server - The $_SERVER array - optionalfunction match(string $path) : ?array
Match given path to a route array., (*4)
A non-null route is not guaranteed to exist - just to be well formed.
It is up the implementations dispatch mechanism to decide it the route exists, (*5)
The returned route array the the a shape of, (*6)
[
// The controller action. Definition varies by router.
RouterInterface:ACTION => 'action',
// An expected class name based on given rules. Not guaranteed to exist.
RouterInterface:CONTROLLER => '\Controller\www\index',
// Router specific but akin to $_GET - may contain additional options
RouterInterface:OPTIONS => ['key' => 'value'],
]
Match given path to a route array., (*7)
A non-null route is not guaranteed to exist - just to be well formed.
It is up the implementations dispatch mechanism to decide it the route exists, (*8)
The returned route array the the a shape of, (*9)
[
// The controller action. Definition varies by router.
RouterInterface:ACTION => 'action',
// An expected class name based on given rules. Not guaranteed to exist.
RouterInterface:CONTROLLER => '\Controller\www\index',
// Router specific but akin to $_GET - may contain additional options
RouterInterface:OPTIONS => ['key' => 'value'],
]
$path - The path to match against including query string ala foo/bar.html?param=woo
function generate($controller [, ?string $action = null [, array $options = []]]) : string
Generate a URL for the given controller, action and options, (*10)
$controller - Instance or Relative 'admin\index' or absolute '\Controllers\www\admin\index'function getNamespace() : string
<?php
namespace Corpus\Router;
class CliRouter {
public const ARGUMENTS = 'arguments';
public const ACTION = 'action';
public const CONTROLLER = 'controller';
public const OPTIONS = 'options';
}
function __construct($rootNamespace [, array $arguments = []])
$rootNamespace - The namespace prefix the controllers will be underfunction match(string $path) : ?array
Match given path to a route array., (*11)
A non-null route is not guaranteed to exist - just to be well formed.
It is up the implementations dispatch mechanism to decide it the route exists, (*12)
The returned route array the the a shape of, (*13)
[
// The controller action. Definition varies by router.
RouterInterface:ACTION => 'action',
// An expected class name based on given rules. Not guaranteed to exist.
RouterInterface:CONTROLLER => '\Controller\www\index',
// Router specific but akin to $_GET - may contain additional options
RouterInterface:OPTIONS => ['key' => 'value'],
]
$path - The path to match against including query string ala foo/bar.html?param=woo
function getNamespace() : string
Simple Router
MIT