From cea113f0184e7694a4a84938e1123c12f5694269 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ismail=20=C3=96zg=C3=BCn=20Turan?= Date: Tue, 15 Aug 2023 08:29:38 +0200 Subject: [PATCH 1/2] Revert "[HttpKernel] Deprecate StreamedResponseListener, it serves no purpose anymore" This reverts commit ee617748174dbf8d9b236b01a4e9067e7b0abb4e. --- UPGRADE-6.1.md | 5 ----- src/Symfony/Bundle/FrameworkBundle/Resources/config/web.php | 4 ++++ src/Symfony/Component/HttpKernel/CHANGELOG.md | 1 - .../HttpKernel/EventListener/AbstractSessionListener.php | 2 +- .../HttpKernel/EventListener/StreamedResponseListener.php | 4 ---- 5 files changed, 5 insertions(+), 11 deletions(-) diff --git a/UPGRADE-6.1.md b/UPGRADE-6.1.md index 333731b4e1f83..0029ea9fcc833 100644 --- a/UPGRADE-6.1.md +++ b/UPGRADE-6.1.md @@ -27,11 +27,6 @@ FrameworkBundle To prevent services resetting after each message the "--no-reset" option in "messenger:consume" command can be set * Deprecate not setting the `http_method_override` config option. The default value will change to `false` in 7.0. -HttpKernel ----------- - - * Deprecate StreamedResponseListener, it's not needed anymore - Routing ------- diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/web.php b/src/Symfony/Bundle/FrameworkBundle/Resources/config/web.php index a3a6ef7735612..7725b7509c05b 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/web.php +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/web.php @@ -31,6 +31,7 @@ use Symfony\Component\HttpKernel\EventListener\ErrorListener; use Symfony\Component\HttpKernel\EventListener\LocaleListener; use Symfony\Component\HttpKernel\EventListener\ResponseListener; +use Symfony\Component\HttpKernel\EventListener\StreamedResponseListener; use Symfony\Component\HttpKernel\EventListener\ValidateRequestListener; return static function (ContainerConfigurator $container) { @@ -104,6 +105,9 @@ ]) ->tag('kernel.event_subscriber') + ->set('streamed_response_listener', StreamedResponseListener::class) + ->tag('kernel.event_subscriber') + ->set('locale_listener', LocaleListener::class) ->args([ service('request_stack'), diff --git a/src/Symfony/Component/HttpKernel/CHANGELOG.md b/src/Symfony/Component/HttpKernel/CHANGELOG.md index 8aceb90c862f7..021fe312b51a8 100644 --- a/src/Symfony/Component/HttpKernel/CHANGELOG.md +++ b/src/Symfony/Component/HttpKernel/CHANGELOG.md @@ -32,7 +32,6 @@ CHANGELOG * Add `BackedEnumValueResolver` to resolve backed enum cases from request attributes in controller arguments * Add `DateTimeValueResolver` to resolve request attributes into DateTime objects in controller arguments - * Deprecate StreamedResponseListener, it's not needed anymore * Add `Profiler::isEnabled()` so collaborating collector services may elect to omit themselves * Add the `UidValueResolver` argument value resolver * Add `AbstractBundle` class for DI configuration/definition on a single file diff --git a/src/Symfony/Component/HttpKernel/EventListener/AbstractSessionListener.php b/src/Symfony/Component/HttpKernel/EventListener/AbstractSessionListener.php index ec27eaec122e5..4cdef3e0624d7 100644 --- a/src/Symfony/Component/HttpKernel/EventListener/AbstractSessionListener.php +++ b/src/Symfony/Component/HttpKernel/EventListener/AbstractSessionListener.php @@ -257,7 +257,7 @@ public static function getSubscribedEvents(): array { return [ KernelEvents::REQUEST => ['onKernelRequest', 128], - // low priority to come after regular response listeners + // low priority to come after regular response listeners, but higher than StreamedResponseListener KernelEvents::RESPONSE => ['onKernelResponse', -1000], ]; } diff --git a/src/Symfony/Component/HttpKernel/EventListener/StreamedResponseListener.php b/src/Symfony/Component/HttpKernel/EventListener/StreamedResponseListener.php index 312d5ee23b68e..1a61188f433d2 100644 --- a/src/Symfony/Component/HttpKernel/EventListener/StreamedResponseListener.php +++ b/src/Symfony/Component/HttpKernel/EventListener/StreamedResponseListener.php @@ -16,8 +16,6 @@ use Symfony\Component\HttpKernel\Event\ResponseEvent; use Symfony\Component\HttpKernel\KernelEvents; -trigger_deprecation('symfony/http-kernel', '6.1', 'The "%s" class is deprecated.', StreamedResponseListener::class); - /** * StreamedResponseListener is responsible for sending the Response * to the client. @@ -25,8 +23,6 @@ * @author Fabien Potencier * * @final - * - * @deprecated since Symfony 6.1 */ class StreamedResponseListener implements EventSubscriberInterface { From 97ed88709472f3d25e03e3eca5187f2e17154a40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ismail=20=C3=96zg=C3=BCn=20Turan?= Date: Tue, 15 Aug 2023 09:29:19 +0200 Subject: [PATCH 2/2] [HttpKernel] Add test to ensure Request being there while StreamedResponse --- .../HttpKernel/Tests/HttpKernelTest.php | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/Symfony/Component/HttpKernel/Tests/HttpKernelTest.php b/src/Symfony/Component/HttpKernel/Tests/HttpKernelTest.php index a5a240a6265ec..10fe698ac1a40 100644 --- a/src/Symfony/Component/HttpKernel/Tests/HttpKernelTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/HttpKernelTest.php @@ -18,6 +18,7 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpFoundation\StreamedResponse; use Symfony\Component\HttpKernel\Controller\ArgumentResolverInterface; use Symfony\Component\HttpKernel\Controller\ControllerResolverInterface; use Symfony\Component\HttpKernel\Event\ExceptionEvent; @@ -477,6 +478,34 @@ public function testInconsistentClientIpsOnMainRequests() Request::setTrustedProxies([], -1); } + public function testVerifyRequestStackPushPopCallOrderDuringHandle() + { + $request = new Request(); + $stack = new RequestStack(); + $dispatcher = new EventDispatcher(); + $kernel = $this->getHttpKernel($dispatcher, null, $stack); + + $response = $kernel->handle($request, HttpKernelInterface::MAIN_REQUEST); + self::assertNull($stack->getMainRequest()); + $response->send(); + self::assertNull($stack->getMainRequest()); + } + + public function testVerifyRequestStackPushPopWithStreamedResponse() + { + $request = new Request(); + $stack = new RequestStack(); + $dispatcher = new EventDispatcher(); + $kernel = $this->getHttpKernel($dispatcher, [new TestController(), 'streamedResponseController'], $stack); + + $response = $kernel->handle($request, HttpKernelInterface::MAIN_REQUEST); + self::assertNotNull($stack->getMainRequest()); + ob_start(); + $response->send(); + self::assertSame('foo', ob_get_clean()); + self::assertNull($stack->getMainRequest()); + } + private function getHttpKernel(EventDispatcherInterface $eventDispatcher, $controller = null, RequestStack $requestStack = null, array $arguments = [], bool $handleAllThrowables = false) { $controller ??= fn () => new Response('Hello'); @@ -515,6 +544,13 @@ public function controller() return new Response('foo'); } + public function streamedResponseController() + { + return new StreamedResponse(function () { + echo 'foo'; + }); + } + public static function staticController() { return new Response('foo'); pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy