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
@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.