Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fixing order inconsistency in queryString and bug with string based e…

…xisting querystring
  • Loading branch information...
commit 45a96ae588f88ea1046b327a12a564fb094903fc 1 parent a1e06b9
Jelle Henkens jellehenkens authored
11 lib/Cake/Routing/Router.php
View
@@ -957,12 +957,19 @@ public static function queryString($q, $extra = array(), $escape = false) {
$out = '';
if (is_array($q)) {
- $q = array_merge($extra, $q);
+ $q = array_merge($q, $extra);
} else {
$out = $q;
$q = $extra;
}
- $out .= http_build_query($q, null, $join);
+ $addition = http_build_query($q, null, $join);
+
+ if ($out && $addition) {
+ $out .= $join;
+ }
+
+ $out .= $addition;
+
if (isset($out[0]) && $out[0] != '?') {
$out = '?' . $out;
}
37 lib/Cake/Test/Case/Routing/RouterTest.php
View
@@ -2590,4 +2590,41 @@ public function testSettingNonExistentDefaultRouteException() {
Router::defaultRouteClass('NonExistentClass');
}
+/**
+ * Tests generating well-formed querystrings
+ *
+ * @return void
+ */
+ public function testQueryString() {
+ $result = Router::queryString(array('var' => 'foo bar'));
+ $expected = '?var=foo+bar';
+ $this->assertEquals($expected, $result);
+
+ $result = Router::queryString(false, array('some' => 'param', 'foo' => 'bar'));
+ $expected = '?some=param&foo=bar';
+ $this->assertEquals($expected, $result);
+
+ $existing = array('apple' => 'red', 'pear' => 'green');
+ $result = Router::queryString($existing, array('some' => 'param', 'foo' => 'bar'));
+ $expected = '?apple=red&pear=green&some=param&foo=bar';
+ $this->assertEquals($expected, $result);
+
+ $existing = 'apple=red&pear=green';
+ $result = Router::queryString($existing, array('some' => 'param', 'foo' => 'bar'));
+ $expected = '?apple=red&pear=green&some=param&foo=bar';
+ $this->assertEquals($expected, $result);
+
+ $existing = '?apple=red&pear=green';
+ $result = Router::queryString($existing, array('some' => 'param', 'foo' => 'bar'));
+ $expected = '?apple=red&pear=green&some=param&foo=bar';
+ $this->assertEquals($expected, $result);
+
+ $result = Router::queryString('apple=red&pear=green');
+ $expected = '?apple=red&pear=green';
+ $this->assertEquals($expected, $result);
+
+ $result = Router::queryString('foo=bar', array('php' => 'nut', 'jose' => 'zap'), true);
+ $expected = '?foo=bar&php=nut&jose=zap';
+ $this->assertEquals($expected, $result);
+ }
}
Please sign in to comment.
Something went wrong with that request. Please try again.