Added parameter support for Group routes.

This commit is contained in:
Simon Sessingø
2017-09-03 16:37:20 +01:00
parent 52e0f5ef94
commit 3a90578351
5 changed files with 74 additions and 34 deletions
+1 -1
View File
@@ -21,7 +21,7 @@ interface IRoute
*
* @param Request $request
* @throws \Pecee\SimpleRouter\Exceptions\NotFoundHttpException
* @return void
* @return string
*/
public function renderRoute(Request $request);
+2 -1
View File
@@ -42,6 +42,7 @@ abstract class Route implements IRoute
protected $defaultParameterRegex;
protected $paramModifiers = '{}';
protected $paramOptionalSymbol = '?';
protected $urlRegex = '/^%s\/?$/u';
protected $group;
protected $parent;
protected $callback;
@@ -154,7 +155,7 @@ abstract class Route implements IRoute
$urlRegex = preg_quote($route, '/');
}
if (preg_match('/^' . $urlRegex . '\/?$/u', $url, $matches) > 0) {
if (preg_match(sprintf($this->urlRegex, $urlRegex), $url, $matches) > 0) {
$values = [];
+13 -5
View File
@@ -48,9 +48,17 @@ class RouteGroup extends Route implements IGroupRoute
*/
public function matchRoute($url, Request $request)
{
/* Skip if prefix doesn't match */
if ($this->prefix !== null && stripos($url, $this->prefix) === false) {
return false;
if($this->prefix !== null) {
/* Parse parameters from current route */
$parameters = $this->parseParameters($this->prefix, $url);
/* If no custom regular expression or parameters was found on this route, we stop */
if ($parameters === null) {
return false;
}
/* Set the parameters */
$this->setParameters((array)$parameters);
}
return $this->matchDomain($request);
@@ -150,11 +158,11 @@ class RouteGroup extends Route implements IGroupRoute
$this->setPrefix($values['prefix'] . $this->prefix);
}
if (isset($values['exceptionHandler'])) {
if ($merge === false && isset($values['exceptionHandler'])) {
$this->setExceptionHandlers((array)$values['exceptionHandler']);
}
if (isset($values['domain'])) {
if ($merge === false &&isset($values['domain'])) {
$this->setDomains((array)$values['domain']);
}
@@ -0,0 +1,34 @@
<?php
namespace Pecee\SimpleRouter\Route;
use Pecee\Http\Request;
class PartialGroup extends RouteGroup
{
/**
* Method called to check if route matches
*
* @param string $url
* @param Request $request
* @return bool
*/
public function matchRoute($url, Request $request)
{
if($this->prefix !== null) {
/* Parse parameters from current route */
$parameters = $this->parseParameters($this->prefix, $url);
/* If no custom regular expression or parameters was found on this route, we stop */
if ($parameters === null) {
return false;
}
/* Set the parameters */
$this->setParameters((array)$parameters);
}
return $this->matchDomain($request);
}
}