API: add $includeGetVars flag for SS_HTTPRequest() to return the URL with the attached GET parameters.

This commit is contained in:
Will Rossiter 2012-06-29 22:02:30 +12:00
parent 168663657b
commit 16cb504d8e
2 changed files with 34 additions and 2 deletions

View File

@ -228,10 +228,30 @@ class SS_HTTPRequest implements ArrayAccess {
}
/**
* Returns the URL used to generate the page
*
* @param bool $includeGetVars whether or not to include the get parameters\
*
* @return string
*/
function getURL() {
return ($this->getExtension()) ? $this->url . '.' . $this->getExtension() : $this->url;
function getURL($includeGetVars = false) {
$url = ($this->getExtension()) ? $this->url . '.' . $this->getExtension() : $this->url;
if ($includeGetVars) {
// if we don't unset $vars['url'] we end up with /my/url?url=my/url&foo=bar etc
$vars = $this->getVars();
unset($vars['url']);
if (count($vars)) {
$url .= '?' . http_build_query($vars);
}
}
else if(strpos($url, "?") !== false) {
$url = substr($url, 0, strpos($url, "?"));
}
return $url;
}
/**

View File

@ -242,4 +242,16 @@ class HTTPRequestTest extends SapphireTest {
$req->addHeader('X-Requested-With', 'XMLHttpRequest');
$this->assertTrue($req->isAjax());
}
public function testGetURL() {
$req = new SS_HTTPRequest('GET', '/');
$this->assertEquals('', $req->getURL());
$req = new SS_HTTPRequest('GET', '/assets/somefile.gif');
$this->assertEquals('assets/somefile.gif', $req->getURL());
$req = new SS_HTTPRequest('GET', '/home?test=1');
$this->assertEquals('home?test=1', $req->getURL(true));
$this->assertEquals('home', $req->getURL());
}
}