diff --git a/UPGRADE-6.1.md b/UPGRADE-6.1.md index 333731b4e1f8..0029ea9fcc83 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 a3a6ef773561..7725b7509c05 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 8aceb90c862f..021fe312b51a 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 ec27eaec122e..4cdef3e0624d 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 312d5ee23b68..1a61188f433d 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 { diff --git a/src/Symfony/Component/HttpKernel/Tests/HttpKernelTest.php b/src/Symfony/Component/HttpKernel/Tests/HttpKernelTest.php index a5a240a6265e..10fe698ac1a4 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