bug #28565 [HttpFoundation][Security] forward locale and format to subrequests (nicolas-grekas)

This PR was merged into the 2.8 branch.

Discussion
----------

[HttpFoundation][Security] forward locale and format to subrequests

| Q             | A
| ------------- | ---
| Branch?       | 2.8
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #28368, #21546
| License       | MIT
| Doc PR        | -

See discussion in linked issue.

Commits
-------

41eb1914f6 [HttpFoundation][Security] forward locale and format to subrequests
This commit is contained in:
Fabien Potencier 2018-09-26 07:47:26 +02:00
commit c9bbc6693e
4 changed files with 35 additions and 1 deletions

View File

@ -1367,7 +1367,7 @@ class Request
* * _format request parameter
* * $default
*
* @param string $default The default format
* @param string|null $default The default format
*
* @return string The request format
*/

View File

@ -122,6 +122,13 @@ class InlineFragmentRenderer extends RoutableFragmentRenderer
$subRequest->setSession($session);
}
if ($request->get('_format')) {
$subRequest->attributes->set('_format', $request->get('_format'));
}
if ($request->getDefaultLocale() !== $request->getLocale()) {
$subRequest->setLocale($request->getLocale());
}
return $subRequest;
}

View File

@ -175,6 +175,26 @@ class InlineFragmentRendererTest extends TestCase
$this->assertEquals('Foo', ob_get_clean());
}
public function testLocaleAndFormatAreIsKeptInSubrequest()
{
$expectedSubRequest = Request::create('/');
$expectedSubRequest->attributes->set('_format', 'foo');
$expectedSubRequest->setLocale('fr');
if (Request::getTrustedHeaderName(Request::HEADER_CLIENT_IP)) {
$expectedSubRequest->headers->set('x-forwarded-for', array('127.0.0.1'));
$expectedSubRequest->server->set('HTTP_X_FORWARDED_FOR', '127.0.0.1');
}
$expectedSubRequest->headers->set('forwarded', array('for="127.0.0.1";host="localhost";proto=http'));
$expectedSubRequest->server->set('HTTP_FORWARDED', 'for="127.0.0.1";host="localhost";proto=http');
$strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest($expectedSubRequest));
$request = Request::create('/');
$request->attributes->set('_format', 'foo');
$request->setLocale('fr');
$strategy->render('/', $request);
}
public function testESIHeaderIsKeptInSubrequest()
{
$expectedSubRequest = Request::create('/');

View File

@ -91,6 +91,13 @@ class HttpUtils
$newRequest->attributes->set(Security::LAST_USERNAME, $request->attributes->get(Security::LAST_USERNAME));
}
if ($request->get('_format')) {
$newRequest->attributes->set('_format', $request->get('_format'));
}
if ($request->getDefaultLocale() !== $request->getLocale()) {
$newRequest->setLocale($request->getLocale());
}
return $newRequest;
}