From cdfc136c1569924e56ab1802ff8378625b99485d Mon Sep 17 00:00:00 2001 From: Sofien Date: Tue, 11 Jun 2019 16:47:27 +0100 Subject: [PATCH 1/3] Match route to request --- src/WP_Route.php | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/WP_Route.php b/src/WP_Route.php index 22c31c1..cddbc5f 100644 --- a/src/WP_Route.php +++ b/src/WP_Route.php @@ -129,7 +129,25 @@ private function getRouteParams($route){ } return $return; - } + } + + private function matchRouteToRequest($route, $request) { + $routes = $this->tokenize($route); + $requests = $this->tokenize($request); + + $diff = array_diff($routes, $requests); + + $matched = true; + + if( !empty($diff) ) { + foreach($diff as $k => $param) { + if( preg_match('/\{\s*.+?\s*\}/', $param) && !empty($requests[$k]) ) continue; + $matched = false; + } + } + + return $matched; + } // ----------------------------------------------------- @@ -162,7 +180,13 @@ public function handle(){ if(count($this->tokenize($route->route)) !== count($tokenizedRequestURI)){ unset($routes[$key]); continue; - } + } + + // Filter routes that do not match the request + if( ! $this->matchRouteToRequest($route->route, $requestURI) ) { + unset($routes[$key]); + continue; + } // Add more filtering here as routing gets more complex. } From 0d9dd7ae1683e3af4663bf6ba84f996447a72dd6 Mon Sep 17 00:00:00 2001 From: Sofien Date: Wed, 12 Jun 2019 12:10:27 +0100 Subject: [PATCH 2/3] Match URIs with query params ex: '?v=abc' --- src/WP_Route.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/WP_Route.php b/src/WP_Route.php index cddbc5f..b7071ba 100644 --- a/src/WP_Route.php +++ b/src/WP_Route.php @@ -159,7 +159,8 @@ public static function routes(){ } public function tokenize($url){ - return array_filter(explode('/', ltrim($url, '/'))); + extract( parse_url($url) ); + return array_filter(explode('/', ltrim($path, '/'))); } public function requestURI(){ From 071224dcabecaef1ac26d73e522e34e6ac9ca250 Mon Sep 17 00:00:00 2001 From: Sofien Date: Fri, 14 Jun 2019 14:08:29 +0100 Subject: [PATCH 3/3] Fix unhandled parse_url --- src/WP_Route.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/WP_Route.php b/src/WP_Route.php index b7071ba..4e8856c 100644 --- a/src/WP_Route.php +++ b/src/WP_Route.php @@ -160,6 +160,7 @@ public static function routes(){ public function tokenize($url){ extract( parse_url($url) ); + if( !isset($path) ) $path = ''; return array_filter(explode('/', ltrim($path, '/'))); }