소스 검색

Tags functionality

Artur Welp 2 년 전
부모
커밋
05a330d65e
3개의 변경된 파일73개의 추가작업 그리고 4개의 파일을 삭제
  1. 45 0
      src/Routes/Route.php
  2. 20 2
      src/Routes/RouteCollection.php
  3. 8 2
      src/Routes/RouteGroup.php

+ 45 - 0
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
+        ];
+    }
+
 }

+ 20 - 2
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);
+    }
+
 }

+ 8 - 2
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));
+    }
+
 }