diff --git a/src/Symfony/Component/HttpKernel/Fragment/InlineFragmentRenderer.php b/src/Symfony/Component/HttpKernel/Fragment/InlineFragmentRenderer.php index 38880b32d3d2f..aa9ecab27b14b 100644 --- a/src/Symfony/Component/HttpKernel/Fragment/InlineFragmentRenderer.php +++ b/src/Symfony/Component/HttpKernel/Fragment/InlineFragmentRenderer.php @@ -81,6 +81,11 @@ public function render($uri, Request $request, array $options = array()) } } + /** + * @param $uri + * @param \Symfony\Component\HttpFoundation\Request $request + * @return Request + */ protected function createSubRequest($uri, Request $request) { $cookies = $request->cookies->all(); @@ -89,7 +94,7 @@ protected function createSubRequest($uri, Request $request) // the sub-request is internal $server['REMOTE_ADDR'] = '127.0.0.1'; - $subRequest = Request::create($uri, 'get', array(), $cookies, array(), $server); + $subRequest = call_user_func(array(get_class($request), 'create'), $uri, 'get', array(), $cookies, array(), $server); if ($session = $request->getSession()) { $subRequest->setSession($session); } diff --git a/src/Symfony/Component/HttpKernel/Tests/Fixtures/UserRequest.php b/src/Symfony/Component/HttpKernel/Tests/Fixtures/UserRequest.php new file mode 100644 index 0000000000000..11728098c7a03 --- /dev/null +++ b/src/Symfony/Component/HttpKernel/Tests/Fixtures/UserRequest.php @@ -0,0 +1,18 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpKernel\Tests\Fixtures; + +use Symfony\Component\HttpFoundation\Request; + +class UserRequest extends Request +{ + +} \ No newline at end of file diff --git a/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php b/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php index 380d13a29498d..3ee50375e68cd 100644 --- a/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php @@ -17,6 +17,8 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\EventDispatcher\EventDispatcher; +use Symfony\Component\HttpKernel\HttpKernelInterface; +use Symfony\Component\HttpKernel\Tests\Fixtures\UserRequest; class InlineFragmentRendererTest extends \PHPUnit_Framework_TestCase { @@ -95,6 +97,10 @@ public function testRenderExceptionIgnoreErrorsWithAlt() $this->assertEquals('bar', $strategy->render('/', Request::create('/'), array('ignore_errors' => true, 'alt' => '/foo'))->getContent()); } + /** + * @param $returnValue + * @return \PHPUnit_Framework_MockObject_MockObject|HttpKernelInterface + */ private function getKernel($returnValue) { $kernel = $this->getMock('Symfony\Component\HttpKernel\HttpKernelInterface'); @@ -137,4 +143,16 @@ public function testExceptionInSubRequestsDoesNotMangleOutputBuffers() $this->assertEquals('Foo', ob_get_clean()); } + + public function testCreateSubRequestMethod() + { + $userRequest = new UserRequest(); + $renderer = new InlineFragmentRenderer($this->getKernel($this->returnValue(null))); + $reflectionRenderer = new \ReflectionObject($renderer); + $method = $reflectionRenderer->getMethod('createSubRequest'); + $method->setAccessible(true); + $createdSubRequest = $method->invoke($renderer, '/testUri', $userRequest); + $this->assertNotSame($userRequest, $createdSubRequest); + $this->assertInstanceOf(get_class($userRequest), $createdSubRequest); + } }