Browse Source

Update Core\Router

Add optional anchor.
Visman 4 năm trước cách đây
mục cha
commit
b61f382405
1 tập tin đã thay đổi với 15 bổ sung8 xóa
  1. 15 8
      app/Core/Router.php

+ 15 - 8
app/Core/Router.php

@@ -319,11 +319,17 @@ class Router
             $this->methods[$method] = 1;
         }
 
-        $link   = $route;
-        $anchor = '';
-        if (false !== \strpos($route, '#')) {
-            list($route, $anchor) = \explode('#', $route, 2);
-            $anchor = '#' . $anchor;
+        $link = $route;
+        $pos  = \strpos($route, '#');
+
+        if (
+            false !== $pos
+            && false === \strpos($route, ']', $pos)
+        ) {
+            $anchor = \substr($route, $pos);
+            $route  = \substr($route, 0, $pos);
+        } else {
+            $anchor = '';
         }
 
         if (false === \strpbrk($route, '{}[]')) {
@@ -337,8 +343,8 @@ class Router
             }
         } else {
             $data = $this->parse($route);
-            if (false === $data) {
-                throw new InvalidArgumentException('Route is incorrect');
+            if (null === $data) {
+                throw new InvalidArgumentException("Wrong route: {$route}");
             }
             if (\is_array($method)) {
                 foreach ($method as $m) {
@@ -363,7 +369,7 @@ class Router
      */
     protected function parse(string $route): ?array
     {
-        $parts = \preg_split('%([\[\]{}/])%', $route, -1, \PREG_SPLIT_NO_EMPTY | \PREG_SPLIT_DELIM_CAPTURE);
+        $parts = \preg_split('%([\[\]{}/#])%', $route, -1, \PREG_SPLIT_NO_EMPTY | \PREG_SPLIT_DELIM_CAPTURE);
 
         $s = 1;
         $base = $parts[0];
@@ -411,6 +417,7 @@ class Router
             } elseif ($first) {
                 switch ($part) {
                     case '/':
+                    case '#':
                         $first    = false;
                         $pattern .= \preg_quote($part, '%');
                         $temp    .= $part;