Browse Source

Merge pull request #9647 from dakota/multi-extensions

Add support for parsing multi-extensions
José Lorenzo Rodríguez 9 years ago
parent
commit
346b74a218
2 changed files with 12 additions and 2 deletions
  1. 1 1
      src/Routing/Route/Route.php
  2. 11 1
      tests/TestCase/Routing/Route/RouteTest.php

+ 1 - 1
src/Routing/Route/Route.php

@@ -349,7 +349,7 @@ class Route
         if (empty($this->_extensions)) {
             return [$url, null];
         }
-        preg_match('/\.([0-9a-z]*)$/', $url, $match);
+        preg_match('/\.([0-9a-z\.]*)$/', $url, $match);
         if (empty($match[1])) {
             return [$url, null];
         }

+ 11 - 1
tests/TestCase/Routing/Route/RouteTest.php

@@ -109,7 +109,7 @@ class RouteTest extends TestCase
         $result = $route->parse('/posts/index.pdf', 'GET');
         $this->assertFalse(isset($result['_ext']));
 
-        $route->extensions(['pdf', 'json', 'xml']);
+        $route->extensions(['pdf', 'json', 'xml', 'xml.gz']);
         $result = $route->parse('/posts/index.pdf', 'GET');
         $this->assertEquals('pdf', $result['_ext']);
 
@@ -118,6 +118,9 @@ class RouteTest extends TestCase
 
         $result = $route->parse('/posts/index.xml', 'GET');
         $this->assertEquals('xml', $result['_ext']);
+
+        $result = $route->parse('/posts/index.xml.gz', 'GET');
+        $this->assertEquals('xml.gz', $result['_ext']);
     }
 
     /**
@@ -619,6 +622,13 @@ class RouteTest extends TestCase
             'c' => 'd'
         ]);
         $this->assertEquals('/posts/view/1.json?id=b&c=d', $result);
+
+        $result = $route->match([
+            'controller' => 'posts',
+            'action' => 'index',
+            '_ext' => 'json.gz',
+        ]);
+        $this->assertEquals('/posts/index.json.gz', $result);
     }
 
     /**