Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 971e1d6

Browse filesBrowse files
committed
render_esi behaviour when fallback
1 parent cc13cc5 commit 971e1d6
Copy full SHA for 971e1d6

File tree

Expand file treeCollapse file tree

6 files changed

+57
-6
lines changed
Filter options
Expand file treeCollapse file tree

6 files changed

+57
-6
lines changed

‎src/Symfony/Component/HttpKernel/Fragment/AbstractSurrogateFragmentRenderer.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/HttpKernel/Fragment/AbstractSurrogateFragmentRenderer.php
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ public function __construct(SurrogateInterface $surrogate = null, FragmentRender
6464
public function render($uri, Request $request, array $options = array())
6565
{
6666
if (!$this->surrogate || !$this->surrogate->hasSurrogateCapability($request)) {
67+
$options['is_fallback'] = true;
68+
6769
return $this->inlineStrategy->render($uri, $request, $options);
6870
}
6971

‎src/Symfony/Component/HttpKernel/Fragment/InlineFragmentRenderer.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/HttpKernel/Fragment/InlineFragmentRenderer.php
+5Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@ public function render($uri, Request $request, array $options = array())
5959
// want that as we want to preserve objects (so we manually set Request attributes
6060
// below instead)
6161
$attributes = $reference->attributes;
62+
if (isset($options['is_fallback']) && $options['is_fallback'] )
63+
{
64+
$this->checkNonScalar($attributes);
65+
unset($options['is_fallback']);
66+
}
6267
$reference->attributes = array();
6368

6469
// The request format and locale might have been overridden by the user

‎src/Symfony/Component/HttpKernel/Fragment/RoutableFragmentRenderer.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/HttpKernel/Fragment/RoutableFragmentRenderer.php
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ protected function generateFragmentUri(ControllerReference $reference, Request $
7777
return $request->getBaseUrl().$path;
7878
}
7979

80-
private function checkNonScalar($values)
80+
protected function checkNonScalar($values)
8181
{
8282
foreach ($values as $key => $value) {
8383
if (is_array($value)) {

‎src/Symfony/Component/HttpKernel/Tests/DependencyInjection/LazyLoadingFragmentHandlerTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/HttpKernel/Tests/DependencyInjection/LazyLoadingFragmentHandlerTest.php
-1Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ public function test()
2828

2929
$container = $this->getMock('Symfony\Component\DependencyInjection\ContainerInterface');
3030
$container->expects($this->once())->method('get')->will($this->returnValue($renderer));
31-
3231
$handler = new LazyLoadingFragmentHandler($container, false, $requestStack);
3332
$handler->addRendererService('foo', 'foo');
3433

‎src/Symfony/Component/HttpKernel/Tests/Fragment/EsiFragmentRendererTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/HttpKernel/Tests/Fragment/EsiFragmentRendererTest.php
+11-4Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@ class EsiFragmentRendererTest extends \PHPUnit_Framework_TestCase
2121
{
2222
public function testRenderFallbackToInlineStrategyIfNoRequest()
2323
{
24-
$strategy = new EsiFragmentRenderer(new Esi(), $this->getInlineStrategy(true));
24+
$strategy = new EsiFragmentRenderer(new Esi(), $this->getInlineStrategy(true, array('is_fallback' => true)));
2525
$strategy->render('/', Request::create('/'));
2626
}
2727

2828
public function testRenderFallbackToInlineStrategyIfEsiNotSupported()
2929
{
30-
$strategy = new EsiFragmentRenderer(new Esi(), $this->getInlineStrategy(true));
30+
$strategy = new EsiFragmentRenderer(new Esi(), $this->getInlineStrategy(true, array('is_fallback' => true)));
3131
$strategy->render('/', Request::create('/'));
3232
}
3333

@@ -90,12 +90,19 @@ public function testRenderAltControllerReferenceWithoutSignerThrowsException()
9090
$strategy->render('/', $request, array('alt' => new ControllerReference('alt_controller')));
9191
}
9292

93-
private function getInlineStrategy($called = false)
93+
private function getInlineStrategy($called = false, $options = false)
9494
{
9595
$inline = $this->getMockBuilder('Symfony\Component\HttpKernel\Fragment\InlineFragmentRenderer')->disableOriginalConstructor()->getMock();
9696

9797
if ($called) {
98-
$inline->expects($this->once())->method('render');
98+
if ($options)
99+
{
100+
$inline->expects($this->once())->method('render')->with($this->anything(), $this->anything(), $options);
101+
}
102+
else
103+
{
104+
$inline->expects($this->once())->method('render');
105+
}
99106
}
100107

101108
return $inline;

‎src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php
+38Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,44 @@ public function testRenderWithObjectsAsAttributesPassedAsObjectsInTheController(
6767
$this->assertEquals('bar', $response->getContent());
6868
}
6969

70+
/**
71+
* @expectedException \LogicException
72+
*/
73+
public function testRenderWithObjectsAsAttributesWhenIsFallBack()
74+
{
75+
$object = new \stdClass();
76+
77+
$subRequest = Request::create('/_fragment?_path=_format%3Dhtml%26_locale%3Den%26_controller%3Dmain_controller');
78+
$subRequest->attributes->replace(array('object' => $object, '_format' => 'html', '_controller' => 'main_controller', '_locale' => 'en'));
79+
$subRequest->headers->set('x-forwarded-for', array('127.0.0.1'));
80+
$subRequest->server->set('HTTP_X_FORWARDED_FOR', '127.0.0.1');
81+
82+
$strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest($subRequest));
83+
84+
$strategy->render(new ControllerReference('main_controller', array('object' => $object), array()), Request::create('/'), array('is_fallback' => true));
85+
}
86+
87+
/**
88+
* @expectedException \LogicException
89+
*/
90+
public function testRenderWithObjectsAsAttributesPassedAsObjectsInTheControllerWhenIsFallBack()
91+
{
92+
$resolver = $this->getMock('Symfony\\Component\\HttpKernel\\Controller\\ControllerResolver', array('getController'));
93+
$resolver
94+
->expects($this->never())
95+
->method('getController')
96+
->will($this->returnValue(function (\stdClass $object, Bar $object1) {
97+
return new Response($object1->getBar());
98+
}))
99+
;
100+
101+
$kernel = new HttpKernel(new EventDispatcher(), $resolver);
102+
$renderer = new InlineFragmentRenderer($kernel);
103+
104+
$response = $renderer->render(new ControllerReference('main_controller', array('object' => new \stdClass(), 'object1' => new Bar()), array()), Request::create('/'), array('is_fallback' => true));
105+
$this->assertEquals('bar', $response->getContent());
106+
}
107+
70108
public function testRenderWithTrustedHeaderDisabled()
71109
{
72110
$trustedHeaderName = Request::getTrustedHeaderName(Request::HEADER_CLIENT_IP);

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.