mirror of
https://github.com/skipperbent/simple-php-router.git
synced 2026-07-10 23:02:14 +00:00
Development
- Fixed updatae causing middlewares to sometimes load on wrong routes. - Converted project to PSR/2. - Updated InputCollection class and added get method for easy access to values. - Complete refactor of RouterBase. - Added findRoute method to RouterBase. - It's now possible to change parameter modifiers and symbol by overwriting properties on RouterBase. - Added RouterUrlTest unit-test for testing route-urls. - Added IRestController that can be easily implemented in custom ResourceController-classes. - It's now possible to use "-" instead of "_" when using getHeader method in Request class. - Added PHPDocs. - Fixed "/" route sometimes returning "//" as url. - Optimisations and bugfixes.
This commit is contained in:
@@ -1,158 +1,347 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* ---------------------------
|
||||
* Router helper class
|
||||
* ---------------------------
|
||||
* This class is added so calls can be made statically like Router::get() making the code look more pretty.
|
||||
*/
|
||||
|
||||
namespace Pecee\SimpleRouter;
|
||||
|
||||
use Pecee\Exception\RouterException;
|
||||
use Pecee\Http\Middleware\BaseCsrfVerifier;
|
||||
|
||||
class SimpleRouter {
|
||||
class SimpleRouter
|
||||
{
|
||||
protected static $defaultNamespace;
|
||||
|
||||
/**
|
||||
* Start/route request
|
||||
* @throws \Pecee\Exception\RouterException
|
||||
*/
|
||||
public static function start() {
|
||||
RouterBase::getInstance()->routeRequest();
|
||||
}
|
||||
/**
|
||||
* Start/route request
|
||||
*
|
||||
* @throws \Pecee\Exception\RouterException
|
||||
*/
|
||||
public static function start()
|
||||
{
|
||||
static::router()->routeRequest();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set default namespace for all routes
|
||||
* @param string $defaultNamespace
|
||||
*/
|
||||
public static function setDefaultNamespace($defaultNamespace) {
|
||||
RouterBase::getInstance()->setDefaultNamespace($defaultNamespace);
|
||||
}
|
||||
/**
|
||||
* Set default namespace which will be prepended to all routes.
|
||||
*
|
||||
* @param string $defaultNamespace
|
||||
*/
|
||||
public static function setDefaultNamespace($defaultNamespace)
|
||||
{
|
||||
static::$defaultNamespace = $defaultNamespace;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set base csrf verifier
|
||||
* @param BaseCsrfVerifier $baseCsrfVerifier
|
||||
*/
|
||||
public static function csrfVerifier(BaseCsrfVerifier $baseCsrfVerifier) {
|
||||
RouterBase::getInstance()->setCsrfVerifier($baseCsrfVerifier);
|
||||
}
|
||||
/**
|
||||
* Base CSRF verifier
|
||||
*
|
||||
* @param BaseCsrfVerifier $baseCsrfVerifier
|
||||
*/
|
||||
public static function csrfVerifier(BaseCsrfVerifier $baseCsrfVerifier)
|
||||
{
|
||||
static::router()->setCsrfVerifier($baseCsrfVerifier);
|
||||
}
|
||||
|
||||
public static function addBootManager(RouterBootManager $bootManager) {
|
||||
RouterBase::getInstance()->addBootManager($bootManager);
|
||||
}
|
||||
/**
|
||||
* Boot managers allows you to alter the routes before the routing occurs.
|
||||
* Perfect if you want to load pretty-urls from a file or database.
|
||||
*
|
||||
* @param RouterBootManager $bootManager
|
||||
*/
|
||||
public static function addBootManager(RouterBootManager $bootManager)
|
||||
{
|
||||
static::router()->addBootManager($bootManager);
|
||||
}
|
||||
|
||||
public static function get($url, $callback, array $settings = null) {
|
||||
return static::match(['get'], $url, $callback, $settings);
|
||||
}
|
||||
/**
|
||||
* Route the given url to your callback on GET request method.
|
||||
*
|
||||
* @param string $url
|
||||
* @param string|\Closure $callback
|
||||
* @param array|null $settings
|
||||
* @return RouterRoute
|
||||
*/
|
||||
public static function get($url, $callback, array $settings = null)
|
||||
{
|
||||
return static::match(['get'], $url, $callback, $settings);
|
||||
}
|
||||
|
||||
public static function post($url, $callback, array $settings = null) {
|
||||
return static::match(['post'], $url, $callback, $settings);
|
||||
}
|
||||
/**
|
||||
* Route the given url to your callback on POST request method.
|
||||
*
|
||||
* @param string $url
|
||||
* @param string|\Closure $callback
|
||||
* @param array|null $settings
|
||||
* @return RouterRoute
|
||||
*/
|
||||
public static function post($url, $callback, array $settings = null)
|
||||
{
|
||||
return static::match(['post'], $url, $callback, $settings);
|
||||
}
|
||||
|
||||
public static function put($url, $callback, array $settings = null) {
|
||||
return static::match(['put'], $url, $callback, $settings);
|
||||
}
|
||||
/**
|
||||
* Route the given url to your callback on PUT request method.
|
||||
*
|
||||
* @param string $url
|
||||
* @param string|\Closure $callback
|
||||
* @param array|null $settings
|
||||
* @return RouterRoute
|
||||
*/
|
||||
public static function put($url, $callback, array $settings = null)
|
||||
{
|
||||
return static::match(['put'], $url, $callback, $settings);
|
||||
}
|
||||
|
||||
public static function patch($url, $callback, array $settings = null) {
|
||||
return static::match(['patch'], $url, $callback, $settings);
|
||||
}
|
||||
/**
|
||||
* Route the given url to your callback on PATCH request method.
|
||||
*
|
||||
* @param string $url
|
||||
* @param string|\Closure $callback
|
||||
* @param array|null $settings
|
||||
* @return RouterRoute
|
||||
*/
|
||||
public static function patch($url, $callback, array $settings = null)
|
||||
{
|
||||
return static::match(['patch'], $url, $callback, $settings);
|
||||
}
|
||||
|
||||
public static function options($url, $callback, array $settings = null) {
|
||||
return static::match(['options'], $url, $callback, $settings);
|
||||
}
|
||||
/**
|
||||
* Route the given url to your callback on OPTIONS request method.
|
||||
*
|
||||
* @param string $url
|
||||
* @param string|\Closure $callback
|
||||
* @param array|null $settings
|
||||
* @return RouterRoute
|
||||
*/
|
||||
public static function options($url, $callback, array $settings = null)
|
||||
{
|
||||
return static::match(['options'], $url, $callback, $settings);
|
||||
}
|
||||
|
||||
public static function delete($url, $callback, array $settings = null) {
|
||||
return static::match(['delete'], $url, $callback, $settings);
|
||||
}
|
||||
/**
|
||||
* Route the given url to your callback on DELETE request method.
|
||||
*
|
||||
* @param string $url
|
||||
* @param string|\Closure $callback
|
||||
* @param array|null $settings
|
||||
* @return RouterRoute
|
||||
*/
|
||||
public static function delete($url, $callback, array $settings = null)
|
||||
{
|
||||
return static::match(['delete'], $url, $callback, $settings);
|
||||
}
|
||||
|
||||
public static function group($settings = array(), $callback) {
|
||||
$group = new RouterGroup();
|
||||
$group->setCallback($callback);
|
||||
/**
|
||||
* Groups allows for encapsulating routes with special settings.
|
||||
*
|
||||
* @param array $settings
|
||||
* @param \Closure $callback
|
||||
* @throws RouterException
|
||||
* @return RouterGroup
|
||||
*/
|
||||
public static function group($settings = array(), \Closure $callback)
|
||||
{
|
||||
$group = new RouterGroup();
|
||||
$group->setCallback($callback);
|
||||
|
||||
if($settings !== null && is_array($settings)) {
|
||||
$group->setData($settings);
|
||||
}
|
||||
if ($settings !== null && is_array($settings) === true) {
|
||||
$group->setData($settings);
|
||||
}
|
||||
|
||||
RouterBase::getInstance()->addRoute($group);
|
||||
if (is_callable($callback) === false) {
|
||||
throw new RouterException('Invalid callback provided. Only functions or methods supported');
|
||||
}
|
||||
|
||||
return $group;
|
||||
}
|
||||
static::router()->addRoute($group);
|
||||
|
||||
/**
|
||||
* Adds get + post route
|
||||
*
|
||||
* @param string $url
|
||||
* @param callable $callback
|
||||
* @param array|null $settings
|
||||
* @return RouterRoute
|
||||
*/
|
||||
public static function basic($url, $callback, array $settings = null) {
|
||||
return static::match(['get', 'post'], $url, $callback, $settings);
|
||||
}
|
||||
return $group;
|
||||
}
|
||||
|
||||
public static function match(array $requestMethods, $url, $callback, array $settings = null) {
|
||||
$route = new RouterRoute($url, $callback);
|
||||
$route->setRequestMethods($requestMethods);
|
||||
/**
|
||||
* Alias for the form method
|
||||
*
|
||||
* @param string $url
|
||||
* @param callable $callback
|
||||
* @param array|null $settings
|
||||
* @see SimpleRouter::form
|
||||
* @return RouterRoute
|
||||
*/
|
||||
public static function basic($url, $callback, array $settings = null)
|
||||
{
|
||||
return static::match(['get', 'post'], $url, $callback, $settings);
|
||||
}
|
||||
|
||||
if($settings !== null) {
|
||||
$route->setData($settings);
|
||||
}
|
||||
/**
|
||||
* This type will route the given url to your callback on the provided request methods.
|
||||
* Route the given url to your callback on POST and GET request method.
|
||||
*
|
||||
* @param string $url
|
||||
* @param string|\Closure $callback
|
||||
* @param array|null $settings
|
||||
* @see SimpleRouter::form
|
||||
* @return RouterRoute
|
||||
*/
|
||||
public static function form($url, $callback, array $settings = null)
|
||||
{
|
||||
return static::match(['get', 'post'], $url, $callback, $settings);
|
||||
}
|
||||
|
||||
RouterBase::getInstance()->addRoute($route);
|
||||
/**
|
||||
* This type will route the given url to your callback on the provided request methods.
|
||||
*
|
||||
* @param array $requestMethods
|
||||
* @param string $url
|
||||
* @param string|\Closure $callback
|
||||
* @param array|null $settings
|
||||
* @return RouterEntry|RouterRoute
|
||||
*/
|
||||
public static function match(array $requestMethods, $url, $callback, array $settings = null)
|
||||
{
|
||||
$route = new RouterRoute($url, $callback);
|
||||
$route->setRequestMethods($requestMethods);
|
||||
|
||||
return $route;
|
||||
}
|
||||
if ($settings !== null) {
|
||||
$route->setData($settings);
|
||||
}
|
||||
|
||||
public static function all($url, $callback, array $settings = null) {
|
||||
$route = new RouterRoute($url, $callback);
|
||||
$route = static::addDefaultNamespace($route);
|
||||
|
||||
if($settings !== null) {
|
||||
$route->setData($settings);
|
||||
}
|
||||
static::router()->addRoute($route);
|
||||
|
||||
RouterBase::getInstance()->addRoute($route);
|
||||
return $route;
|
||||
}
|
||||
|
||||
return $route;
|
||||
}
|
||||
/**
|
||||
* This type will route the given url to your callback and allow any type of request method
|
||||
*
|
||||
* @param string $url
|
||||
* @param string|\Closure $callback
|
||||
* @param array|null $settings
|
||||
* @return RouterRoute
|
||||
*/
|
||||
public static function all($url, $callback, array $settings = null)
|
||||
{
|
||||
$route = new RouterRoute($url, $callback);
|
||||
|
||||
public static function controller($url, $controller, array $settings = null) {
|
||||
$route = new RouterController($url, $controller);
|
||||
if ($settings !== null) {
|
||||
$route->setData($settings);
|
||||
}
|
||||
|
||||
if($settings !== null) {
|
||||
$route->setData($settings);
|
||||
}
|
||||
$route = static::addDefaultNamespace($route);
|
||||
|
||||
RouterBase::getInstance()->addRoute($route);
|
||||
static::router()->addRoute($route);
|
||||
|
||||
return $route;
|
||||
}
|
||||
return $route;
|
||||
}
|
||||
|
||||
public static function resource($url, $controller, array $settings = null) {
|
||||
$route = new RouterResource($url, $controller);
|
||||
/**
|
||||
* This route will route request from the given url to the controller.
|
||||
*
|
||||
* @param string $url
|
||||
* @param string $controller
|
||||
* @param array|null $settings
|
||||
* @return RouterController
|
||||
*/
|
||||
public static function controller($url, $controller, array $settings = null)
|
||||
{
|
||||
$route = new RouterController($url, $controller);
|
||||
|
||||
if($settings !== null) {
|
||||
$route->setData($settings);
|
||||
}
|
||||
if ($settings !== null) {
|
||||
$route->setData($settings);
|
||||
}
|
||||
|
||||
static::router()->addRoute($route);
|
||||
$route = static::addDefaultNamespace($route);
|
||||
|
||||
return $route;
|
||||
}
|
||||
static::router()->addRoute($route);
|
||||
|
||||
public static function getRoute($controller = null, $parameters = null, $getParams = null) {
|
||||
return static::router()->getRoute($controller, $parameters, $getParams);
|
||||
}
|
||||
return $route;
|
||||
}
|
||||
|
||||
public static function request() {
|
||||
return static::router()->getRequest();
|
||||
}
|
||||
/**
|
||||
* This type will route all REST-supported requests to different methods in the provided controller.
|
||||
*
|
||||
* @param string $url
|
||||
* @param string $controller
|
||||
* @param array|null $settings
|
||||
* @return RouterResource
|
||||
*/
|
||||
public static function resource($url, $controller, array $settings = null)
|
||||
{
|
||||
$route = new RouterResource($url, $controller);
|
||||
|
||||
public static function response() {
|
||||
return static::router()->getResponse();
|
||||
}
|
||||
if ($settings !== null) {
|
||||
$route->setData($settings);
|
||||
}
|
||||
|
||||
protected static function router() {
|
||||
return RouterBase::getInstance();
|
||||
}
|
||||
static::router()->addRoute($route);
|
||||
|
||||
return $route;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get url by controller or alias.
|
||||
*
|
||||
* @param string $controller
|
||||
* @param array|null $parameters
|
||||
* @param array|null $getParams
|
||||
* @return string
|
||||
*/
|
||||
public static function getRoute($controller = null, $parameters = null, $getParams = null)
|
||||
{
|
||||
return static::router()->getRoute($controller, $parameters, $getParams);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the request
|
||||
*
|
||||
* @return \Pecee\Http\Request
|
||||
*/
|
||||
public static function request()
|
||||
{
|
||||
return static::router()->getRequest();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the response object
|
||||
*
|
||||
* @return \Pecee\Http\Response
|
||||
*/
|
||||
public static function response()
|
||||
{
|
||||
return static::router()->getResponse();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the router instance
|
||||
*
|
||||
* @return RouterBase
|
||||
*/
|
||||
public static function router()
|
||||
{
|
||||
return RouterBase::getInstance();
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepends the default namespace to all new routes added.
|
||||
*
|
||||
* @param RouterEntry $route
|
||||
* @return RouterEntry
|
||||
*/
|
||||
protected static function addDefaultNamespace(RouterEntry $route)
|
||||
{
|
||||
if (static::$defaultNamespace !== null) {
|
||||
$namespace = static::$defaultNamespace;
|
||||
|
||||
if ($route->getNamespace() !== null) {
|
||||
$namespace .= '\\' . $route->getNamespace();
|
||||
}
|
||||
|
||||
$route->setNamespace($namespace);
|
||||
}
|
||||
|
||||
return $route;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user