A Simple Collection of Routers
- php: >=7.1
Install the latest version with:
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 = []])
- array
$server
- The $_SERVER array - optional
function match(string $path) : ?array
Match given path to a route array.
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
The returned route array the the a shape of
[
// 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.
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
The returned route array the the a shape of
[
// 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'],
]
- string
$path
- The path to match against including query string alafoo/bar.html?param=woo
- array | null - route array or null on failure to route
function generate($controller [, ?string $action = null [, array $options = []]]) : string
Generate a URL for the given controller, action and options
- object | string
$controller
- Instance or Relative 'admin\index' or absolute '\Controllers\www\admin\index'
function getNamespace() : string
- string - The canonical namespace prefix
<?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 = []])
- string
$rootNamespace
- The namespace prefix the controllers will be under
function match(string $path) : ?array
Match given path to a route array.
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
The returned route array the the a shape of
[
// 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'],
]
- string
$path
- The path to match against including query string alafoo/bar.html?param=woo
- array | null - route array or null on failure to route
function getNamespace() : string
- string - The canonical namespace prefix