Compare commits

..

23 Commits

Author SHA1 Message Date
Simon Sessingø b1ca3fc9ef Merge pull request #70 from skipperbent/development
[FEATURE] Added http code to redirect method.
2016-03-14 00:59:09 +01:00
Simon Sessingø a92b6008fa [TASK] Added http code to redirect method. 2016-03-14 01:00:19 +01:00
Simon Sessingø 253c0c70d4 Merge pull request #69 from skipperbent/development
[BUGFIX] Bugfix
2016-03-01 22:52:38 +01:00
Simon Sessingø 115c8e510a [BUGFIX] Added urldecode to RouterRessource, RouterRoute and
RouterController class to ensure that urls with special letters can be
picked up by a custom regular expression (read documentation: match).
2016-03-01 22:50:26 +01:00
Simon Sessingø 53ba2d7ac5 Merge pull request #68 from skipperbent/development
[TASK] Fixed regex causing optional parameters to sometimes catch req…
2016-01-23 16:12:27 +01:00
Simon Sessingø 35ee79d02c [TASK] Fixed regex causing optional parameters to sometimes catch required
parameters value.
2016-01-23 16:10:44 +01:00
Simon Sessingø 315fe05769 Merge pull request #67 from skipperbent/development
Development
2016-01-17 04:57:39 +01:00
Simon Sessingø 6306b604e8 Merge branch 'development' of https://github.com/skipperbent/simple-php-router into development 2016-01-17 04:56:56 +01:00
Simon Sessingø 4dd0739df9 [BUGFIX] Fixed minor errors with optional parameter when using getRoute(). 2016-01-17 04:56:29 +01:00
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
8 changed files with 78 additions and 20 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;
}
}
+6 -1
View File
@@ -19,8 +19,13 @@ class Response {
* Redirect the response
*
* @param string $url
* @param int $httpCode
*/
public function redirect($url) {
public function redirect($url, $httpCode = null) {
if($httpCode !== null) {
$this->httpCode($httpCode);
}
$this->header('Location: ' . $url);
die();
}
+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;
+1 -1
View File
@@ -43,7 +43,7 @@ class RouterController extends RouterEntry {
}
public function matchRoute(Request $request) {
$url = parse_url($request->getUri());
$url = parse_url(urldecode($request->getUri()));
$url = rtrim($url['path'], '/') . '/';
if(strtolower($url) == strtolower($this->url) || stripos($url, $this->url) === 0) {
+21 -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,7 +284,7 @@ abstract class RouterEntry {
if($lastCharacter === '?') {
$parameter = substr($parameter, 0, strlen($parameter)-1);
$regex .= '\\/?(?P<'.$parameter.'>[^\/]*)\\/?';
$regex .= '(?:\\/?(?P<'.$parameter.'>[^\/]+)?\\/?)';
$required = false;
} else {
$regex .= '\\/(?P<' . $parameter . '>'. $parameterRegex .')\\/';
@@ -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;
}
}
@@ -366,7 +376,11 @@ abstract class RouterEntry {
throw new RouterException(sprintf('Method %s does not exist in class %s', $method, $className), 404);
}
call_user_func_array(array($class, $method), $this->getParameters());
$parameters = array_filter($this->getParameters(), function($var){
return !is_null($var);
});
call_user_func_array(array($class, $method), $parameters);
return $class;
}
+3 -3
View File
@@ -46,12 +46,12 @@ class RouterResource extends RouterEntry {
}
public function matchRoute(Request $request) {
$url = parse_url($request->getUri());
$url = parse_url(urldecode($request->getUri()));
$url = rtrim($url['path'], '/') . '/';
$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
+5 -2
View File
@@ -2,6 +2,7 @@
namespace Pecee\SimpleRouter;
use Pecee\ArrayUtil;
use Pecee\Http\Request;
class RouterRoute extends RouterEntry {
@@ -20,7 +21,7 @@ class RouterRoute extends RouterEntry {
public function matchRoute(Request $request) {
$url = parse_url($request->getUri());
$url = parse_url(urldecode($request->getUri()));
$url = rtrim($url['path'], '/') . '/';
// Match on custom defined regular expression
@@ -49,6 +50,8 @@ class RouterRoute extends RouterEntry {
return true;
}
return null;
}
@@ -74,7 +77,7 @@ class RouterRoute extends RouterEntry {
if(count($parameters)) {
$tmp = array();
foreach($parameters as $param) {
$tmp[$param] = '';
$tmp[$param] = null;
}
$this->parameters = $tmp;
}