mirror of
https://github.com/skipperbent/simple-php-router.git
synced 2026-06-18 17:26:28 +00:00
Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b1ca3fc9ef | |||
| a92b6008fa | |||
| 253c0c70d4 | |||
| 115c8e510a | |||
| 53ba2d7ac5 | |||
| 35ee79d02c | |||
| 315fe05769 | |||
| 6306b604e8 | |||
| 4dd0739df9 | |||
| a57113309a | |||
| 0bd234d996 | |||
| 27d24758b1 | |||
| 4d08f08c68 | |||
| aeacda1812 | |||
| 765204f552 |
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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,8 +327,8 @@ class RouterBase {
|
||||
return $url;
|
||||
}
|
||||
|
||||
if($controller === null && $this->loadedRoute !== null) {
|
||||
return $this->processUrl($this->loadedRoute, $this->loadedRoute->getMethod(), $parameters, $getParams);
|
||||
if($controller === null && $this->request->loadedRoute !== null) {
|
||||
return $this->processUrl($this->request->loadedRoute, $this->request->loadedRoute->getMethod(), $parameters, $getParams);
|
||||
}
|
||||
|
||||
$c = '';
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
@@ -238,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 = '';
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ 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?}';
|
||||
@@ -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
|
||||
|
||||
@@ -21,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
|
||||
@@ -40,10 +40,18 @@ class RouterRoute extends RouterEntry {
|
||||
$parameters = $this->parseParameters($route, $url);
|
||||
|
||||
if($parameters !== null) {
|
||||
$this->parameters = $parameters;
|
||||
|
||||
if(is_array($this->parameters)) {
|
||||
$this->parameters = array_merge($this->parameters, $parameters);
|
||||
} else {
|
||||
$this->parameters = $parameters;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user