diff --git a/src/Pecee/SimpleRouter/RouterEntry.php b/src/Pecee/SimpleRouter/RouterEntry.php index 098bb86..30b37c6 100644 --- a/src/Pecee/SimpleRouter/RouterEntry.php +++ b/src/Pecee/SimpleRouter/RouterEntry.php @@ -274,7 +274,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 .')\\/'; diff --git a/src/Pecee/SimpleRouter/RouterResource.php b/src/Pecee/SimpleRouter/RouterResource.php index 754af0b..a9733e6 100644 --- a/src/Pecee/SimpleRouter/RouterResource.php +++ b/src/Pecee/SimpleRouter/RouterResource.php @@ -53,45 +53,50 @@ class RouterResource extends RouterEntry { $parameters = $this->parseParameters($route, $url, '[0-9]*?'); - if(is_array($parameters)) { - $parameters = array_merge($this->parameters, $parameters); + 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(isset($parameters['id']) && $this->postMethod === self::REQUEST_TYPE_GET) { + return $this->call('show', $parameters); + } + + // Index + return $this->call('index', $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(isset($parameters['id']) && $this->postMethod === self::REQUEST_TYPE_GET) { - return $this->call('show', $parameters); - } - - // Index - return $this->call('index', $parameters); + return null; } /**