Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
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
@jellehenkens jellehenkens authored
View
11 lib/Cake/Routing/Router.php
@@ -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;
}
View
37 lib/Cake/Test/Case/Routing/RouterTest.php
@@ -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.