[Security] use current request attributes to generate redirect url?
This commit is contained in:
parent
a27f7d8c59
commit
6575df6be8
@ -136,15 +136,25 @@ class HttpUtils
|
||||
return $request->getUriForPath($path);
|
||||
}
|
||||
|
||||
return $this->generateUrl($path, true);
|
||||
return $this->generateUrl($path, $request->attributes->all(), true);
|
||||
}
|
||||
|
||||
private function generateUrl($route, $absolute = false)
|
||||
private function generateUrl($route, array $attributes = array(), $absolute = false)
|
||||
{
|
||||
if (null === $this->urlGenerator) {
|
||||
throw new \LogicException('You must provide a UrlGeneratorInterface instance to be able to use routes.');
|
||||
}
|
||||
|
||||
return $this->urlGenerator->generate($route, array(), $absolute);
|
||||
$url = $this->urlGenerator->generate($route, $attributes, $absolute);
|
||||
|
||||
// unnecessary query string parameters must be removed from url
|
||||
// (ie. query parameters that are presents in $attributes)
|
||||
// fortunately, they all are, so we have to remove entire query string
|
||||
$position = strpos($url, '?');
|
||||
if (false !== $position) {
|
||||
$url = substr($url, 0, $position);
|
||||
}
|
||||
|
||||
return $url;
|
||||
}
|
||||
}
|
||||
|
@ -137,13 +137,25 @@ class HttpUtilsTest extends \PHPUnit_Framework_TestCase
|
||||
$utils->checkRequestPath($this->getRequest(), 'foobar');
|
||||
}
|
||||
|
||||
private function getUrlGenerator()
|
||||
public function testGenerateUrlRemovesQueryString()
|
||||
{
|
||||
$method = new \ReflectionMethod('Symfony\Component\Security\Http\HttpUtils', 'generateUrl');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$utils = new HttpUtils($this->getUrlGenerator());
|
||||
$this->assertEquals('/foo/bar', $method->invoke($utils, 'route_name'));
|
||||
|
||||
$utils = new HttpUtils($this->getUrlGenerator('/foo/bar?param=value'));
|
||||
$this->assertEquals('/foo/bar', $method->invoke($utils, 'route_name'));
|
||||
}
|
||||
|
||||
private function getUrlGenerator($generatedUrl = '/foo/bar')
|
||||
{
|
||||
$urlGenerator = $this->getMock('Symfony\Component\Routing\Generator\UrlGeneratorInterface');
|
||||
$urlGenerator
|
||||
->expects($this->any())
|
||||
->method('generate')
|
||||
->will($this->returnValue('/foo/bar'))
|
||||
->will($this->returnValue($generatedUrl))
|
||||
;
|
||||
|
||||
return $urlGenerator;
|
||||
|
Reference in New Issue
Block a user