Compare commits

..

16 Commits

Author SHA1 Message Date
Simon Sessingø a57113309a Merge pull request #66 from skipperbent/development
Development
2016-01-15 11:56:04 +01:00
Simon Sessingø 0bd234d996 Merge pull request #65 from skipperbent/master
Latest development
2016-01-15 11:55:47 +01:00
Simon Sessingø 27d24758b1 [OPTIMISATION] Ensured action parameter was set before using it. 2016-01-15 11:55:01 +01:00
Simon Sessingø 4d08f08c68 Merge pull request #64 from skipperbent/development
Development
2016-01-15 11:09:00 +01:00
Simon Sessingø aeacda1812 [FEATURE] Added option to change route and get information about current
route through the Request object.

- Updated documentation to relfect new changes.
2016-01-15 11:06:13 +01:00
Simon Sessingø 765204f552 [FEATURE] Moved loadedRoute to request so it can be easily overwritten
from middleware.
2016-01-15 10:34:59 +01:00
Simon Sessingø 4267cb8751 Merge pull request #63 from skipperbent/development
[OPTIMISATION] Parameters matching optimisations.
2016-01-15 10:22:14 +01:00
Simon Sessingø 714edf7902 [OPTIMISATION] Parameters matching optimisations. 2016-01-15 10:20:50 +01:00
Simon Sessingø c3b12ba053 Merge pull request #62 from skipperbent/development
Development
2016-01-15 10:07:51 +01:00
Simon Sessingø b096742d6b [BUGFIX] Enchanched regular expression for optinal parameters to
completely ignore path seperators (/).
2016-01-15 10:06:13 +01:00
Simon Sessingø 3298970798 Merge pull request #61 from skipperbent/development
[BUGFIX] Fixed some ressources not working after latest update.
2016-01-15 09:39:28 +01:00
Simon Sessingø bb6f56ef8c [BUGFIX] Fixed some ressources not working after latest update.
- Optimisations + cleanup.
2016-01-15 09:37:23 +01:00
Simon Sessingø 6c675124fa Merge pull request #60 from skipperbent/development
[BUGFIX] Minor bugfixes and optimisations
2016-01-14 16:41:37 +01:00
Simon Sessingø 14a030294e [BUGFIX] Minor bugfixes and optimisations
- Fixed getRoute sometimes not passing current loaded route.
- Fixed optional parameters in some occasions not working properly.
2016-01-14 16:37:36 +01:00
Simon Sessingø 8bc8124366 Merge pull request #59 from skipperbent/development
[TASK] Simplified regex for matching parameters.
2016-01-05 05:50:35 +01:00
Simon Sessingø 1332ef7139 [TASK] Optimised regex for matching parameters. 2016-01-05 04:52:12 +01:00
6 changed files with 64 additions and 23 deletions
+21
View File
@@ -270,6 +270,24 @@ Register the new class in your ```routes.php```, custom ```Router``` class or wh
SimpleRouter::csrfVerifier(new \Demo\Middleware\CsrfVerifier());
```
## Easily overwrite route about to be loaded
Sometimes it can be useful to manipulate the route that's about to be loaded, for instance if a user is not authenticated or if an error occurred within your Middleware that requires
some other route to be initialised. Simple PHP Router allows you to easily change the route about to be executed. All information about the current route is stored in
the ```\Pecee\SimpleRouter\Http\Request``` object.
**Note:** Please note that it's only possible to change the route BEFORE any route has initially been loaded, so doing this in your custom ExceptionHandler or Middleware is highly recommended.
```php
$route = Request::getInstance()->getLoadedRoute();
$route->setCallback('Example\MyCustomClass@hello');
// -- or --
$route->setClass('Example\MyCustomClass');
$route->setMethod('hello');
```
## Documentation
While I work on a better documentation, please refer to the Laravel 5 routing documentation here:
@@ -278,6 +296,9 @@ http://laravel.com/docs/5.1/routing
## Easily extendable
The router can be easily extended to customize your needs.
## Ideas and issues
If you want a great new feature or experience any issues what-so-ever, please feel free to leave an issue and i'll look into it whenever possible.
## The MIT License (MIT)
Copyright (c) 2015 Simon Sessingø / simple-php-router
+11
View File
@@ -1,6 +1,8 @@
<?php
namespace Pecee\Http;
use Pecee\SimpleRouter\RouterBase;
class Request {
protected static $instance;
@@ -10,6 +12,7 @@ class Request {
protected $host;
protected $method;
protected $headers;
protected $loadedRoute;
/**
* Return new instance
@@ -140,4 +143,12 @@ class Request {
return isset($this->data[$name]) ? $this->data[$name] : null;
}
/**
* Get the currently loaded route.
* @return \Pecee\SimpleRouter\RouterEntry
*/
public function getLoadedRoute() {
return $this->loadedRoute;
}
}
+10 -6
View File
@@ -15,7 +15,6 @@ class RouterBase {
protected $processedRoutes;
protected $controllerUrlMap;
protected $backStack;
protected $loadedRoute;
protected $defaultNamespace;
protected $baseCsrfVerifier;
@@ -144,9 +143,10 @@ class RouterBase {
$routeNotAllowed = false;
$this->loadedRoute = $route;
$this->request->loadedRoute = $route;
$route->loadMiddleware($this->request);
$route->renderRoute($this->request);
$this->request->loadedRoute->renderRoute($this->request);
break;
}
}
@@ -155,7 +155,7 @@ class RouterBase {
throw new RouterException('Route or method not allowed', 403);
}
if(!$this->loadedRoute) {
if(!$this->request->loadedRoute) {
throw new RouterException(sprintf('Route not found: %s', $this->request->getUri()), 404);
}
}
@@ -178,8 +178,8 @@ class RouterBase {
* @return RouterEntry
*/
public function getLoadedRoute() {
if(!($this->loadedRoute instanceof RouterGroup)) {
return $this->loadedRoute;
if(!($this->request->loadedRoute instanceof RouterGroup)) {
return $this->request->loadedRoute;
}
return null;
}
@@ -327,6 +327,10 @@ class RouterBase {
return $url;
}
if($controller === null && $this->request->loadedRoute !== null) {
return $this->processUrl($this->request->loadedRoute, $this->request->loadedRoute->getMethod(), $parameters, $getParams);
}
$c = '';
$method = null;
+17 -7
View File
@@ -77,6 +77,16 @@ abstract class RouterEntry {
return null;
}
public function setMethod($method) {
$this->callback = sprintf('%s@%s', $this->getClass(), $method);
return $this;
}
public function setClass($class) {
$this->callback = sprintf('%s@%s', $class, $this->getMethod());
return $this;
}
/**
* @param string $prefix
* @return self
@@ -178,10 +188,6 @@ abstract class RouterEntry {
public function getMergeableSettings() {
$settings = $this->settings;
/*if(isset($settings['middleware'])) {
unset($settings['middleware']);
}*/
if(isset($settings['prefix'])) {
unset($settings['prefix']);
}
@@ -242,7 +248,7 @@ abstract class RouterEntry {
return new $name();
}
protected function parseParameters($route, $url, $parameterRegex = '[a-z0-9]*?') {
protected function parseParameters($route, $url, $parameterRegex = '[a-z0-9]+?') {
$parameterNames = array();
$regex = '';
$lastCharacter = '';
@@ -278,10 +284,10 @@ abstract class RouterEntry {
if($lastCharacter === '?') {
$parameter = substr($parameter, 0, strlen($parameter)-1);
$regex .= '(?:(?:\/{0,1}(?P<'.$parameter.'>[^\/]*)))\\/{0,1}';
$regex .= '(?:\\/?(?P<'.$parameter.'>[^\/]+)?\\/?)';
$required = false;
} else {
$regex .= '(?:\\/{0,1}(?P<' . $parameter . '>'. $parameterRegex .')\\/{0,1})';
$regex .= '\\/(?P<' . $parameter . '>'. $parameterRegex .')\\/';
}
$parameterNames[] = array('name' => $parameter, 'required' => $required);
$parameter = '';
@@ -314,6 +320,10 @@ abstract class RouterEntry {
throw new RouterException('Missing required parameter ' . $name['name'], 404);
}
if(!$name['required'] && $parameterValue === null) {
continue;
}
$parameters[$name['name']] = $parameterValue;
}
}
+2 -2
View File
@@ -51,7 +51,7 @@ class RouterResource extends RouterEntry {
$route = rtrim($this->url, '/') . '/{id?}/{action?}';
$parameters = $this->parseParameters($route, $url, '[0-9]*?');
$parameters = $this->parseParameters($route, $url, '[0-9]+?');
if($parameters !== null) {
@@ -59,7 +59,7 @@ class RouterResource extends RouterEntry {
$parameters = array_merge($this->parameters, $parameters);
}
$action = $parameters['action'];
$action = isset($parameters['action']) ? $parameters['action'] : null;
unset($parameters['action']);
// Delete
+3 -8
View File
@@ -2,6 +2,7 @@
namespace Pecee\SimpleRouter;
use Pecee\ArrayUtil;
use Pecee\Http\Request;
class RouterRoute extends RouterEntry {
@@ -39,13 +40,7 @@ class RouterRoute extends RouterEntry {
$parameters = $this->parseParameters($route, $url);
if($parameters !== null) {
if(is_array($this->parameters)) {
$this->parameters = array_merge($this->parameters, $parameters);
} else {
$this->parameters = $parameters;
}
$this->parameters = $parameters;
return true;
}
@@ -74,7 +69,7 @@ class RouterRoute extends RouterEntry {
if(count($parameters)) {
$tmp = array();
foreach($parameters as $param) {
$tmp[$param] = '';
$tmp[$param] = null;
}
$this->parameters = $tmp;
}