From 05a330d65e4745ab7ad2f798ae46600b689e8658 Mon Sep 17 00:00:00 2001 From: Artur Welp Date: Tue, 25 Apr 2023 17:49:49 +0000 Subject: [PATCH] Tags functionality --- src/Routes/Route.php | 45 ++++++++++++++++++++++++++++++++++ src/Routes/RouteCollection.php | 22 +++++++++++++++-- src/Routes/RouteGroup.php | 10 ++++++-- 3 files changed, 73 insertions(+), 4 deletions(-) diff --git a/src/Routes/Route.php b/src/Routes/Route.php index b163226..0c468cd 100644 --- a/src/Routes/Route.php +++ b/src/Routes/Route.php @@ -6,6 +6,9 @@ namespace Routes; * */ +/** + * Summary of Route + */ class Route { /* @@ -19,6 +22,12 @@ class Route */ public $_source; + /** + * Tag Name + * @var string + */ + public $_name; + /* * URI String */ @@ -87,6 +96,10 @@ class Route * From Klein * HTTP status List */ + + public $_tags = []; + + protected static $httpMessages = array( // Informational 1xx 100 => 'Continue', @@ -309,4 +322,36 @@ class Route return false; } + function name($name){ + $this->_name = $name; + return $this; + } + + function setTag($key = '', $value = ''){ + $this->_tags[$key][] = $value; + return $this; + } + + function hasTag($key){ + return array_key_exists($key, $this->_tags); + } + + function compress($group, $tag){ + //$pattern = '/\[a:(\w+)\]/'; + //$replacement = '/{{$1}}/'; + //$route = preg_replace($pattern, $replacement, $this->_uri) ); + + $route = str_replace(['[i:', '[d:'], '{{', $this->_uri); + $route = str_replace([']', ']'], '}}', $route); + + return [ + 'name' => $this->_name, + 'group' => $group, + 'tag' => $tag, + 'verbs' => $this->_verb, + //'route' => preg_replace($pattern, $replacement, $this->_uri) + 'route' => $route + ]; + } + } \ No newline at end of file diff --git a/src/Routes/RouteCollection.php b/src/Routes/RouteCollection.php index a5df706..09fe9f9 100644 --- a/src/Routes/RouteCollection.php +++ b/src/Routes/RouteCollection.php @@ -20,6 +20,7 @@ class RouteCollection public $_groupIn = false; public $_groupBase = ''; public $_groupList = []; + public $_groups = []; //SINGLETON============================================== @@ -197,7 +198,7 @@ class RouteCollection * * @ctag RouteCollection::group('base',function(){}) */ - static function group($base = '', $callback) + static function group($base = '', $callback, $name = '') { $collection = self::getInstance(); $collection->_groupList = []; @@ -206,7 +207,9 @@ class RouteCollection call_user_func($callback); $collection->_groupBase = ''; $collection->_groupIn = false; - return new RouteGroup($collection->_groupList); + $group = new RouteGroup($collection->_groupList); + $collection->_groups[$name] = $group; + return $group; } //DEFINITORS============================================= @@ -355,4 +358,19 @@ class RouteCollection } } + public static function getGroupRoutesWithTags($group, $tag = '*') + { + $instance = self::getInstance(); + + if (!isset($instance->_groups[$group])) { + return []; + } + + if (!isset($tag)) { + return $instance->_groups[$group]; + } + + return $instance->_groups[$group]->getRoutesWithTag($group, $tag); + } + } \ No newline at end of file diff --git a/src/Routes/RouteGroup.php b/src/Routes/RouteGroup.php index 4d7b73e..da9dec0 100644 --- a/src/Routes/RouteGroup.php +++ b/src/Routes/RouteGroup.php @@ -58,10 +58,10 @@ class RouteGroup return $this; } - function middlewareAdd($name = '') + function middlewareAdd($name = '', $function) { foreach ($this->_routeGroup as $route) { - $route->_before[$name] = $function; + $route->_before[] = $name; } return $this; } @@ -98,4 +98,10 @@ class RouteGroup return $this; } + function getRoutesWithTag($group, $tag){ + return array_filter(array_map(function($route) use($group, $tag){ + return $route->hasTag($tag) ? $route->compress($group, $tag) : null; + }, $this->_routeGroup)); + } + } \ No newline at end of file