mirror of
https://github.com/skipperbent/simple-php-router.git
synced 2026-07-11 06:52:13 +00:00
Development
- Better php7 support. - Added easier way to debug router. - Improvements and bugfixes. - Updated documentation.
This commit is contained in:
@@ -17,6 +17,6 @@ interface IControllerRoute extends IRoute
|
||||
* @param string $controller
|
||||
* @return static
|
||||
*/
|
||||
public function setController($controller): self;
|
||||
public function setController(string $controller): self;
|
||||
|
||||
}
|
||||
@@ -19,15 +19,15 @@ interface IGroupRoute extends IRoute
|
||||
* Add exception handler
|
||||
*
|
||||
* @param IExceptionHandler|string $handler
|
||||
* @return static $this;
|
||||
* @return static
|
||||
*/
|
||||
public function addExceptionHandler($handler);
|
||||
public function addExceptionHandler($handler): self;
|
||||
|
||||
/**
|
||||
* Set exception-handlers for group
|
||||
*
|
||||
* @param array $handlers
|
||||
* @return static $this
|
||||
* @return static
|
||||
*/
|
||||
public function setExceptionHandlers(array $handlers);
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace Pecee\SimpleRouter\Route;
|
||||
|
||||
use Pecee\Http\Request;
|
||||
use Pecee\SimpleRouter\Router;
|
||||
|
||||
interface ILoadableRoute extends IRoute
|
||||
{
|
||||
@@ -18,22 +19,32 @@ interface ILoadableRoute extends IRoute
|
||||
public function findUrl($method = null, $parameters = null, $name = null): string;
|
||||
|
||||
/**
|
||||
* Loads and renders middlewares-classes
|
||||
* Loads and renders middleware-classes
|
||||
*
|
||||
* @param Request $request
|
||||
* @param Router $router
|
||||
*/
|
||||
public function loadMiddleware(Request $request);
|
||||
public function loadMiddleware(Request $request, Router $router): void;
|
||||
|
||||
public function getUrl();
|
||||
/**
|
||||
* Get url
|
||||
* @return string
|
||||
*/
|
||||
public function getUrl(): string;
|
||||
|
||||
public function setUrl($url);
|
||||
/**
|
||||
* Set url
|
||||
* @param string $url
|
||||
* @return static
|
||||
*/
|
||||
public function setUrl(string $url): self;
|
||||
|
||||
/**
|
||||
* Returns the provided name for the router.
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getName(): string;
|
||||
public function getName(): ?string;
|
||||
|
||||
/**
|
||||
* Check if route has given name.
|
||||
@@ -41,7 +52,7 @@ interface ILoadableRoute extends IRoute
|
||||
* @param string $name
|
||||
* @return bool
|
||||
*/
|
||||
public function hasName($name): bool;
|
||||
public function hasName(string $name): bool;
|
||||
|
||||
/**
|
||||
* Sets the router name, which makes it easier to obtain the url or router at a later point.
|
||||
@@ -49,14 +60,14 @@ interface ILoadableRoute extends IRoute
|
||||
* @param string $name
|
||||
* @return static
|
||||
*/
|
||||
public function setName($name): self;
|
||||
public function setName(string $name): self;
|
||||
|
||||
/**
|
||||
* Get regular expression match used for matching route (if defined).
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getMatch(): string;
|
||||
public function getMatch(): ?string;
|
||||
|
||||
/**
|
||||
* Add regular expression match for the entire route.
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace Pecee\SimpleRouter\Route;
|
||||
|
||||
use Pecee\Http\Request;
|
||||
use Pecee\SimpleRouter\Router;
|
||||
|
||||
interface IRoute
|
||||
{
|
||||
@@ -20,10 +21,11 @@ interface IRoute
|
||||
* Returns class to be rendered.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param Router $router
|
||||
* @throws \Pecee\SimpleRouter\Exceptions\NotFoundHttpException
|
||||
* @return string
|
||||
*/
|
||||
public function renderRoute(Request $request): ?string;
|
||||
public function renderRoute(Request $request, Router $router): ?string;
|
||||
|
||||
/**
|
||||
* Returns callback name/identifier for the current route based on the callback.
|
||||
@@ -103,15 +105,20 @@ interface IRoute
|
||||
* @param string $method
|
||||
* @return static
|
||||
*/
|
||||
public function setMethod($method): self;
|
||||
public function setMethod(string $method): self;
|
||||
|
||||
public function getClass();
|
||||
/**
|
||||
* Get class
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getClass(): ?string;
|
||||
|
||||
/**
|
||||
* @param string $namespace
|
||||
* @return static
|
||||
*/
|
||||
public function setNamespace($namespace);
|
||||
public function setNamespace(string $namespace): self;
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
@@ -122,9 +129,13 @@ interface IRoute
|
||||
* @param string $namespace
|
||||
* @return static
|
||||
*/
|
||||
public function setDefaultNamespace($namespace);
|
||||
public function setDefaultNamespace($namespace): IRoute;
|
||||
|
||||
public function getDefaultNamespace();
|
||||
/**
|
||||
* Get default namespace
|
||||
* @return string|null
|
||||
*/
|
||||
public function getDefaultNamespace(): ?string;
|
||||
|
||||
/**
|
||||
* Get parameter names.
|
||||
@@ -139,7 +150,7 @@ interface IRoute
|
||||
* @param array $options
|
||||
* @return static
|
||||
*/
|
||||
public function setWhere(array $options);
|
||||
public function setWhere(array $options): self;
|
||||
|
||||
/**
|
||||
* Get parameters
|
||||
@@ -152,18 +163,18 @@ interface IRoute
|
||||
* Get parameters
|
||||
*
|
||||
* @param array $parameters
|
||||
* @return static $this
|
||||
* @return static
|
||||
*/
|
||||
public function setParameters(array $parameters);
|
||||
public function setParameters(array $parameters): self;
|
||||
|
||||
/**
|
||||
* Merge with information from another route.
|
||||
*
|
||||
* @param array $settings
|
||||
* @param bool $merge
|
||||
* @return static $this
|
||||
* @return static
|
||||
*/
|
||||
public function setSettings(array $settings, $merge = false);
|
||||
public function setSettings(array $settings, bool $merge = false): self;
|
||||
|
||||
/**
|
||||
* Export route settings to array so they can be merged with another route.
|
||||
|
||||
@@ -5,6 +5,7 @@ namespace Pecee\SimpleRouter\Route;
|
||||
use Pecee\Http\Middleware\IMiddleware;
|
||||
use Pecee\Http\Request;
|
||||
use Pecee\SimpleRouter\Exceptions\HttpException;
|
||||
use Pecee\SimpleRouter\Router;
|
||||
|
||||
abstract class LoadableRoute extends Route implements ILoadableRoute
|
||||
{
|
||||
@@ -24,10 +25,13 @@ abstract class LoadableRoute extends Route implements ILoadableRoute
|
||||
* Loads and renders middlewares-classes
|
||||
*
|
||||
* @param Request $request
|
||||
* @param Router $router
|
||||
* @throws HttpException
|
||||
*/
|
||||
public function loadMiddleware(Request $request) : void
|
||||
public function loadMiddleware(Request $request, Router $router): void
|
||||
{
|
||||
$router->debug('Loading middlewares');
|
||||
|
||||
foreach ($this->getMiddlewares() as $middleware) {
|
||||
|
||||
if (\is_object($middleware) === false) {
|
||||
@@ -38,11 +42,15 @@ abstract class LoadableRoute extends Route implements ILoadableRoute
|
||||
throw new HttpException($middleware . ' must be inherit the IMiddleware interface');
|
||||
}
|
||||
|
||||
$router->debug('Loading middleware "%s"', \get_class($middleware));
|
||||
$middleware->handle($request);
|
||||
$router->debug('Finished loading middleware');
|
||||
}
|
||||
|
||||
$router->debug('Finished loading middlewares');
|
||||
}
|
||||
|
||||
public function matchRegex(Request $request, $url) : ?bool
|
||||
public function matchRegex(Request $request, $url): ?bool
|
||||
{
|
||||
/* Match on custom defined regular expression */
|
||||
|
||||
@@ -59,7 +67,7 @@ abstract class LoadableRoute extends Route implements ILoadableRoute
|
||||
* @param string $url
|
||||
* @return static
|
||||
*/
|
||||
public function setUrl($url) : self
|
||||
public function setUrl(string $url): ILoadableRoute
|
||||
{
|
||||
$this->url = ($url === '/') ? '/' : '/' . trim($url, '/') . '/';
|
||||
|
||||
@@ -75,7 +83,7 @@ abstract class LoadableRoute extends Route implements ILoadableRoute
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getUrl() : string
|
||||
public function getUrl(): string
|
||||
{
|
||||
return $this->url;
|
||||
}
|
||||
@@ -89,7 +97,7 @@ abstract class LoadableRoute extends Route implements ILoadableRoute
|
||||
* @param string|null $name
|
||||
* @return string
|
||||
*/
|
||||
public function findUrl($method = null, $parameters = null, $name = null) : string
|
||||
public function findUrl($method = null, $parameters = null, $name = null): string
|
||||
{
|
||||
$url = $this->getUrl();
|
||||
|
||||
@@ -144,7 +152,7 @@ abstract class LoadableRoute extends Route implements ILoadableRoute
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getName() : string
|
||||
public function getName(): string
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
@@ -155,7 +163,7 @@ abstract class LoadableRoute extends Route implements ILoadableRoute
|
||||
* @param string $name
|
||||
* @return bool
|
||||
*/
|
||||
public function hasName($name) : bool
|
||||
public function hasName(string $name): bool
|
||||
{
|
||||
return strtolower($this->name) === strtolower($name);
|
||||
}
|
||||
@@ -166,7 +174,7 @@ abstract class LoadableRoute extends Route implements ILoadableRoute
|
||||
* @param string $regex
|
||||
* @return static
|
||||
*/
|
||||
public function setMatch($regex) : ILoadableRoute
|
||||
public function setMatch($regex): ILoadableRoute
|
||||
{
|
||||
$this->regex = $regex;
|
||||
|
||||
@@ -178,7 +186,7 @@ abstract class LoadableRoute extends Route implements ILoadableRoute
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getMatch() : string
|
||||
public function getMatch(): string
|
||||
{
|
||||
return $this->regex;
|
||||
}
|
||||
@@ -191,7 +199,7 @@ abstract class LoadableRoute extends Route implements ILoadableRoute
|
||||
* @param string|array $name
|
||||
* @return static
|
||||
*/
|
||||
public function name($name) : ILoadableRoute
|
||||
public function name($name): ILoadableRoute
|
||||
{
|
||||
return $this->setName($name);
|
||||
}
|
||||
@@ -202,7 +210,7 @@ abstract class LoadableRoute extends Route implements ILoadableRoute
|
||||
* @param string $name
|
||||
* @return static
|
||||
*/
|
||||
public function setName($name) : ILoadableRoute
|
||||
public function setName(string $name): ILoadableRoute
|
||||
{
|
||||
$this->name = $name;
|
||||
|
||||
@@ -216,7 +224,7 @@ abstract class LoadableRoute extends Route implements ILoadableRoute
|
||||
* @param bool $merge
|
||||
* @return static
|
||||
*/
|
||||
public function setSettings(array $values, $merge = false): IRoute
|
||||
public function setSettings(array $values, bool $merge = false): IRoute
|
||||
{
|
||||
if (isset($values['as']) === true) {
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ namespace Pecee\SimpleRouter\Route;
|
||||
use Pecee\Http\Middleware\IMiddleware;
|
||||
use Pecee\Http\Request;
|
||||
use Pecee\SimpleRouter\Exceptions\NotFoundHttpException;
|
||||
use Pecee\SimpleRouter\Router;
|
||||
|
||||
abstract class Route implements IRoute
|
||||
{
|
||||
@@ -59,10 +60,10 @@ abstract class Route implements IRoute
|
||||
/**
|
||||
* Load class by name
|
||||
* @param string $name
|
||||
* @return mixed
|
||||
* @return object
|
||||
* @throws NotFoundHttpException
|
||||
*/
|
||||
protected function loadClass($name)
|
||||
protected function loadClass($name): object
|
||||
{
|
||||
if (class_exists($name) === false) {
|
||||
throw new NotFoundHttpException(sprintf('Class "%s" does not exist', $name), 404);
|
||||
@@ -75,21 +76,25 @@ abstract class Route implements IRoute
|
||||
* Render route
|
||||
*
|
||||
* @param Request $request
|
||||
* @param Router $router
|
||||
* @return string|null
|
||||
* @throws NotFoundHttpException
|
||||
*/
|
||||
public function renderRoute(Request $request): ?string
|
||||
public function renderRoute(Request $request, Router $router): ?string
|
||||
{
|
||||
$router->debug('Starting rendering route');
|
||||
|
||||
$callback = $this->getCallback();
|
||||
|
||||
if ($callback === null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$router->debug('Parsing parameters');
|
||||
$parameters = $this->getParameters();
|
||||
$router->debug('Finished parsing parameters');
|
||||
|
||||
/* Filter parameters with null-value */
|
||||
|
||||
if ($this->filterEmptyParams === true) {
|
||||
$parameters = array_filter($parameters, function ($var) {
|
||||
return ($var !== null);
|
||||
@@ -98,7 +103,10 @@ abstract class Route implements IRoute
|
||||
|
||||
/* Render callback function */
|
||||
if (\is_callable($callback) === true) {
|
||||
$router->debug('Executing callback');
|
||||
|
||||
/* When the callback is a function */
|
||||
|
||||
return \call_user_func_array($callback, $parameters);
|
||||
}
|
||||
|
||||
@@ -109,6 +117,7 @@ abstract class Route implements IRoute
|
||||
|
||||
$className = ($namespace !== null && $controller[0][0] !== '\\') ? $namespace . '\\' . $controller[0] : $controller[0];
|
||||
|
||||
$router->debug('Loading class %s', $className);
|
||||
$class = $this->loadClass($className);
|
||||
$method = $controller[1];
|
||||
|
||||
@@ -116,6 +125,8 @@ abstract class Route implements IRoute
|
||||
throw new NotFoundHttpException(sprintf('Method "%s" does not exist in class "%s"', $method, $className), 404);
|
||||
}
|
||||
|
||||
$router->debug('Executing callback');
|
||||
|
||||
return \call_user_func_array([$class, $method], $parameters);
|
||||
}
|
||||
|
||||
@@ -300,7 +311,7 @@ abstract class Route implements IRoute
|
||||
return null;
|
||||
}
|
||||
|
||||
public function getClass()
|
||||
public function getClass(): ?string
|
||||
{
|
||||
if (\is_string($this->callback) === true && strpos($this->callback, '@') !== false) {
|
||||
$tmp = explode('@', $this->callback);
|
||||
@@ -311,14 +322,14 @@ abstract class Route implements IRoute
|
||||
return null;
|
||||
}
|
||||
|
||||
public function setMethod($method): IRoute
|
||||
public function setMethod(string $method): IRoute
|
||||
{
|
||||
$this->callback = sprintf('%s@%s', $this->getClass(), $method);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function setClass($class)
|
||||
public function setClass(string $class): IRoute
|
||||
{
|
||||
$this->callback = sprintf('%s@%s', $class, $this->getMethod());
|
||||
|
||||
@@ -327,9 +338,9 @@ abstract class Route implements IRoute
|
||||
|
||||
/**
|
||||
* @param string $namespace
|
||||
* @return static $this
|
||||
* @return static
|
||||
*/
|
||||
public function setNamespace($namespace)
|
||||
public function setNamespace(string $namespace): IRoute
|
||||
{
|
||||
$this->namespace = $namespace;
|
||||
|
||||
@@ -338,16 +349,16 @@ abstract class Route implements IRoute
|
||||
|
||||
/**
|
||||
* @param string $namespace
|
||||
* @return static $this
|
||||
* @return static
|
||||
*/
|
||||
public function setDefaultNamespace($namespace)
|
||||
public function setDefaultNamespace($namespace): IRoute
|
||||
{
|
||||
$this->defaultNamespace = $namespace;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getDefaultNamespace()
|
||||
public function getDefaultNamespace(): ?string
|
||||
{
|
||||
return $this->defaultNamespace;
|
||||
}
|
||||
@@ -397,9 +408,9 @@ abstract class Route implements IRoute
|
||||
*
|
||||
* @param array $values
|
||||
* @param bool $merge
|
||||
* @return static $this
|
||||
* @return static
|
||||
*/
|
||||
public function setSettings(array $values, $merge = false)
|
||||
public function setSettings(array $values, bool $merge = false): IRoute
|
||||
{
|
||||
if ($this->namespace === null && isset($values['namespace']) === true) {
|
||||
$this->setNamespace($values['namespace']);
|
||||
@@ -445,7 +456,7 @@ abstract class Route implements IRoute
|
||||
* @param array $options
|
||||
* @return static
|
||||
*/
|
||||
public function setWhere(array $options)
|
||||
public function setWhere(array $options): IRoute
|
||||
{
|
||||
$this->where = $options;
|
||||
|
||||
@@ -486,9 +497,9 @@ abstract class Route implements IRoute
|
||||
* Get parameters
|
||||
*
|
||||
* @param array $parameters
|
||||
* @return static $this
|
||||
* @return static
|
||||
*/
|
||||
public function setParameters(array $parameters)
|
||||
public function setParameters(array $parameters): IRoute
|
||||
{
|
||||
/*
|
||||
* If this is the first time setting parameters we store them so we
|
||||
@@ -556,7 +567,7 @@ abstract class Route implements IRoute
|
||||
* This is used when no custom parameter regex is found.
|
||||
*
|
||||
* @param string $regex
|
||||
* @return static $this
|
||||
* @return static
|
||||
*/
|
||||
public function setDefaultParameterRegex($regex)
|
||||
{
|
||||
|
||||
@@ -24,7 +24,7 @@ class RouteController extends LoadableRoute implements IControllerRoute
|
||||
* @param string $name
|
||||
* @return bool
|
||||
*/
|
||||
public function hasName($name): bool
|
||||
public function hasName(string $name): bool
|
||||
{
|
||||
if ($this->name === null) {
|
||||
return false;
|
||||
@@ -134,7 +134,7 @@ class RouteController extends LoadableRoute implements IControllerRoute
|
||||
* @param string $controller
|
||||
* @return static
|
||||
*/
|
||||
public function setController($controller): IControllerRoute
|
||||
public function setController(string $controller): IControllerRoute
|
||||
{
|
||||
$this->controller = $controller;
|
||||
|
||||
@@ -157,7 +157,7 @@ class RouteController extends LoadableRoute implements IControllerRoute
|
||||
* @param string $method
|
||||
* @return static
|
||||
*/
|
||||
public function setMethod($method): IRoute
|
||||
public function setMethod(string $method): IRoute
|
||||
{
|
||||
$this->method = $method;
|
||||
|
||||
@@ -171,7 +171,7 @@ class RouteController extends LoadableRoute implements IControllerRoute
|
||||
* @param bool $merge
|
||||
* @return static
|
||||
*/
|
||||
public function setSettings(array $values, $merge = false): IRoute
|
||||
public function setSettings(array $values, bool $merge = false): IRoute
|
||||
{
|
||||
if (isset($values['names']) === true) {
|
||||
$this->names = $values['names'];
|
||||
|
||||
@@ -147,7 +147,7 @@ class RouteGroup extends Route implements IGroupRoute
|
||||
* @param bool $merge
|
||||
* @return static
|
||||
*/
|
||||
public function setSettings(array $values, $merge = false): IRoute
|
||||
public function setSettings(array $values, bool $merge = false): IRoute
|
||||
{
|
||||
|
||||
if (isset($values['prefix']) === true) {
|
||||
|
||||
@@ -42,7 +42,7 @@ class RouteResource extends LoadableRoute implements IControllerRoute
|
||||
* @param string $name
|
||||
* @return bool
|
||||
*/
|
||||
public function hasName($name): bool
|
||||
public function hasName(string $name): bool
|
||||
{
|
||||
if ($this->name === null) {
|
||||
return false;
|
||||
@@ -154,14 +154,14 @@ class RouteResource extends LoadableRoute implements IControllerRoute
|
||||
* @param string $controller
|
||||
* @return static
|
||||
*/
|
||||
public function setController($controller): IControllerRoute
|
||||
public function setController(string $controller): IControllerRoute
|
||||
{
|
||||
$this->controller = $controller;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function setName($name): ILoadableRoute
|
||||
public function setName(string $name): ILoadableRoute
|
||||
{
|
||||
$this->name = $name;
|
||||
|
||||
@@ -208,7 +208,7 @@ class RouteResource extends LoadableRoute implements IControllerRoute
|
||||
* @param bool $merge
|
||||
* @return static
|
||||
*/
|
||||
public function setSettings(array $values, $merge = false): IRoute
|
||||
public function setSettings(array $values, bool $merge = false): IRoute
|
||||
{
|
||||
if (isset($values['names']) === true) {
|
||||
$this->names = $values['names'];
|
||||
|
||||
Reference in New Issue
Block a user