Compare commits

..

15 Commits

Author SHA1 Message Date
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
Simon Sessingø 12bbc98a82 Merge pull request #58 from skipperbent/development
[BUGFIX] Custom parameters regex is now working again.
2015-12-24 00:48:27 +01:00
Simon Sessingø 69b0f4320e [BUGFIX] Fixed show not always called if using nested ressources. 2015-12-24 00:39:21 +01:00
Simon Sessingø 4c60055c7e [BUGFIX] Custom parameters regex is now working again.
- Fixed custom parameters regex not working.
- Renamed setting "parameterRegex" to "match" to match the Laravel
  documentation.
2015-12-23 20:25:26 +01:00
Simon Sessingø 89aeeeb593 Merge pull request #57 from skipperbent/development
[TASK]
2015-12-19 20:25:36 +01:00
Simon Sessingø 849749969d [OPTIMISATION] Made getAllHeaders protected. 2015-12-19 20:20:42 +01:00
Simon Sessingø c37a7159d2 [OPTIMISATION] No reason to str_replace twice. 2015-12-19 20:18:35 +01:00
Simon Sessingø df2545dd37 [TASK]
- Added support for setups where getallheaders function is not availible.
- Made matchDomain method in RouterGroup always return boolean.
2015-12-19 20:15:10 +01:00
Simon Sessingø bd0a6af41f Merge pull request #56 from skipperbent/development
[BUGFIX] Wrong validation on domain
2015-12-19 18:25:56 +01:00
Simon Sessingø 3510c4c5a4 [BUGFIX] Wrong validation on domain 2015-12-19 18:25:18 +01:00
6 changed files with 82 additions and 74 deletions
+11 -1
View File
@@ -27,7 +27,17 @@ class Request {
$this->host = $_SERVER['HTTP_HOST'];
$this->uri = $_SERVER['REQUEST_URI'];
$this->method = (isset($_POST['_method'])) ? strtolower($_POST['_method']) : strtolower($_SERVER['REQUEST_METHOD']);
$this->headers = array_change_key_case(getallheaders(), CASE_LOWER);
$this->headers = $this->getAllHeaders();
}
protected function getAllHeaders() {
$headers = array();
foreach ($_SERVER as $name => $value) {
if (substr($name, 0, 5) === 'HTTP_') {
$headers[strtolower(str_replace('_', '-', substr($name, 5)))] = $value;
}
}
return $headers;
}
public function getIsSecure() {
+14 -7
View File
@@ -54,7 +54,10 @@ class RouterBase {
$route = $routes[$i];
$route->addSettings($settings);
$route->setGroup($group);
if($backStack) {
$route->setGroup($group);
}
if($this->defaultNamespace && !$route->getNamespace()) {
$namespace = null;
@@ -124,6 +127,12 @@ class RouterBase {
$route = $this->controllerUrlMap[$i];
if($route->getGroup() !== null) {
if($route->getGroup()->matchDomain($this->request) === false) {
continue;
}
}
$routeMatch = $route->matchRoute($this->request);
if($routeMatch) {
@@ -133,12 +142,6 @@ class RouterBase {
continue;
}
if($route->getGroup() !== null) {
if($route->getGroup()->matchDomain($this->request) === false) {
continue;
}
}
$routeNotAllowed = false;
$this->loadedRoute = $route;
@@ -324,6 +327,10 @@ class RouterBase {
return $url;
}
if($controller === null && $this->loadedRoute !== null) {
return $this->processUrl($this->loadedRoute, $this->loadedRoute->getMethod(), $parameters, $getParams);
}
$c = '';
$method = null;
+14 -13
View File
@@ -27,7 +27,7 @@ abstract class RouterEntry {
public function __construct() {
$this->settings = array();
$this->settings['requestMethods'] = array();
$this->settings['parametersRegex'] = array();
$this->settings['where'] = array();
$this->settings['parameters'] = array();
}
@@ -155,7 +155,7 @@ abstract class RouterEntry {
* @return self
*/
public function where(array $options) {
$this->parametersRegex = array_merge($this->parametersRegex, $options);
$this->where = array_merge($this->where, $options);
return $this;
}
@@ -178,10 +178,6 @@ abstract class RouterEntry {
public function getMergeableSettings() {
$settings = $this->settings;
/*if(isset($settings['middleware'])) {
unset($settings['middleware']);
}*/
if(isset($settings['prefix'])) {
unset($settings['prefix']);
}
@@ -249,11 +245,6 @@ abstract class RouterEntry {
$isParameter = false;
$parameter = '';
// Use custom parameter regex if it exists
if(is_array($this->parametersRegex) && isset($this->parametersRegex[$parameter])) {
$parameterRegex = $this->parametersRegex[$parameter];
}
$routeLength = strlen($route);
for($i = 0; $i < $routeLength; $i++) {
@@ -275,12 +266,18 @@ abstract class RouterEntry {
} elseif($isParameter && $character === '}') {
$required = true;
// Check for optional parameter
// Use custom parameter regex if it exists
if(is_array($this->where) && isset($this->where[$parameter])) {
$parameterRegex = $this->where[$parameter];
}
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 = '';
@@ -313,6 +310,10 @@ abstract class RouterEntry {
throw new RouterException('Missing required parameter ' . $name['name'], 404);
}
if(!$name['required'] && $parameterValue === null) {
continue;
}
$parameters[$name['name']] = $parameterValue;
}
}
+3 -3
View File
@@ -28,7 +28,7 @@ class RouterGroup extends RouterEntry {
}
}
return null;
return false;
}
$parameters = $this->parseParameters($this->domain, $request->getHost(), '[^.]*');
@@ -38,10 +38,10 @@ class RouterGroup extends RouterEntry {
return true;
}
return null;
return false;
}
return false;
return true;
}
public function renderRoute(Request $request) {
+37 -42
View File
@@ -53,50 +53,45 @@ class RouterResource extends RouterEntry {
$parameters = $this->parseParameters($route, $url, '[0-9]*?');
if($parameters !== null) {
if(is_array($parameters)) {
$parameters = array_merge($this->parameters, $parameters);
}
$action = $parameters['action'];
unset($parameters['action']);
// Delete
if($request->getMethod() === self::REQUEST_TYPE_DELETE && $this->postMethod === self::REQUEST_TYPE_POST) {
return $this->call('destroy', $parameters);
}
// Update
if(in_array($request->getMethod(), array(self::REQUEST_TYPE_PATCH, self::REQUEST_TYPE_PUT)) && $this->postMethod === self::REQUEST_TYPE_POST) {
return $this->call('update', $parameters);
}
// Edit
if(isset($action) && strtolower($action) === 'edit' && $this->postMethod === self::REQUEST_TYPE_GET) {
return $this->call('edit', $parameters);
}
// Create
if(strtolower($action) === 'create' && $request->getMethod() === self::REQUEST_TYPE_GET) {
return $this->call('create', $parameters);
}
// Save
if($this->postMethod === self::REQUEST_TYPE_POST) {
return $this->call('store', $parameters);
}
// Show
if($action && $this->postMethod === self::REQUEST_TYPE_GET) {
return $this->call('show', $parameters);
}
// Index
return $this->call('index', $parameters);
if(is_array($parameters)) {
$parameters = array_merge($this->parameters, $parameters);
}
return null;
$action = $parameters['action'];
unset($parameters['action']);
// Delete
if($request->getMethod() === self::REQUEST_TYPE_DELETE && $this->postMethod === self::REQUEST_TYPE_POST) {
return $this->call('destroy', $parameters);
}
// Update
if(in_array($request->getMethod(), array(self::REQUEST_TYPE_PATCH, self::REQUEST_TYPE_PUT)) && $this->postMethod === self::REQUEST_TYPE_POST) {
return $this->call('update', $parameters);
}
// Edit
if(isset($action) && strtolower($action) === 'edit' && $this->postMethod === self::REQUEST_TYPE_GET) {
return $this->call('edit', $parameters);
}
// Create
if(strtolower($action) === 'create' && $request->getMethod() === self::REQUEST_TYPE_GET) {
return $this->call('create', $parameters);
}
// Save
if($this->postMethod === self::REQUEST_TYPE_POST) {
return $this->call('store', $parameters);
}
// Show
if(isset($parameters['id']) && $this->postMethod === self::REQUEST_TYPE_GET) {
return $this->call('show', $parameters);
}
// Index
return $this->call('index', $parameters);
}
/**
+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;
}