+ */
+class ServiceResetMiddleware implements HttpKernelInterface, TerminableInterface
+{
+ private $httpKernel;
+ private $services;
+ private $resetMethods;
+
+ public function __construct(HttpKernelInterface $httpKernel, \Traversable $services, array $resetMethods)
+ {
+ $this->services = $services;
+ $this->resetMethods = $resetMethods;
+ $this->httpKernel = $httpKernel;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function handle(Request $request, $type = self::MASTER_REQUEST, $catch = true)
+ {
+ if (self::MASTER_REQUEST === $type) {
+ $this->resetServices();
+ }
+
+ return $this->httpKernel->handle($request);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function terminate(Request $request, Response $response)
+ {
+ if ($this->httpKernel instanceof TerminableInterface) {
+ $this->httpKernel->terminate($request, $response);
+ }
+ }
+
+ private function resetServices()
+ {
+ foreach ($this->services as $id => $service) {
+ $method = $this->resetMethods[$id];
+ $service->$method();
+ }
+ }
+}
diff --git a/src/Symfony/Component/HttpKernel/Tests/DependencyInjection/ResettableServicePassTest.php b/src/Symfony/Component/HttpKernel/Tests/DependencyInjection/ResettableServicePassTest.php
index c998ef2eaf086..938c3278b9587 100644
--- a/src/Symfony/Component/HttpKernel/Tests/DependencyInjection/ResettableServicePassTest.php
+++ b/src/Symfony/Component/HttpKernel/Tests/DependencyInjection/ResettableServicePassTest.php
@@ -8,7 +8,8 @@
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\HttpKernel\DependencyInjection\ResettableServicePass;
-use Symfony\Component\HttpKernel\EventListener\ServiceResetListener;
+use Symfony\Component\HttpKernel\HttpKernel;
+use Symfony\Component\HttpKernel\Middleware\ServiceResetMiddleware;
use Symfony\Component\HttpKernel\Tests\Fixtures\ClearableService;
use Symfony\Component\HttpKernel\Tests\Fixtures\ResettableService;
@@ -17,6 +18,7 @@ class ResettableServicePassTest extends TestCase
public function testCompilerPass()
{
$container = new ContainerBuilder();
+ $container->register(HttpKernel::class)->setSynthetic(true);
$container->register('one', ResettableService::class)
->setPublic(true)
->addTag('kernel.reset', array('method' => 'reset'));
@@ -24,17 +26,22 @@ public function testCompilerPass()
->setPublic(true)
->addTag('kernel.reset', array('method' => 'clear'));
- $container->register(ServiceResetListener::class)
+ $container->register(ServiceResetMiddleware::class)
->setPublic(true)
- ->setArguments(array(null, array()));
+ ->setArguments(array(
+ '$httpKernel' => new Reference(HttpKernel::class),
+ '$services' => null,
+ '$resetMethods' => array()
+ ));
$container->addCompilerPass(new ResettableServicePass('kernel.reset'));
$container->compile();
- $definition = $container->getDefinition(ServiceResetListener::class);
+ $definition = $container->getDefinition(ServiceResetMiddleware::class);
$this->assertEquals(
array(
+ new Reference(HttpKernel::class),
new IteratorArgument(array(
'one' => new Reference('one', ContainerInterface::IGNORE_ON_UNINITIALIZED_REFERENCE),
'two' => new Reference('two', ContainerInterface::IGNORE_ON_UNINITIALIZED_REFERENCE),
@@ -55,27 +62,20 @@ public function testCompilerPass()
public function testMissingMethod()
{
$container = new ContainerBuilder();
+ $container->register(HttpKernel::class)->setSynthetic(true);
$container->register(ResettableService::class)
->addTag('kernel.reset');
- $container->register(ServiceResetListener::class)
- ->setArguments(array(null, array()));
+ $container->register(ServiceResetMiddleware::class)
+ ->setArguments(array(
+ '$httpKernel' => new Reference(HttpKernel::class),
+ '$services' => null,
+ '$resetMethods' => array()
+ ));
$container->addCompilerPass(new ResettableServicePass('kernel.reset'));
$container->compile();
}
- public function testCompilerPassWithoutResetters()
- {
- $container = new ContainerBuilder();
- $container->register(ServiceResetListener::class)
- ->setArguments(array(null, array()));
- $container->addCompilerPass(new ResettableServicePass());
-
- $container->compile();
-
- $this->assertFalse($container->has(ServiceResetListener::class));
- }
-
public function testCompilerPassWithoutListener()
{
$container = new ContainerBuilder();
@@ -83,6 +83,6 @@ public function testCompilerPassWithoutListener()
$container->compile();
- $this->assertFalse($container->has(ServiceResetListener::class));
+ $this->assertFalse($container->has(ServiceResetMiddleware::class));
}
}
diff --git a/src/Symfony/Component/HttpKernel/Tests/EventListener/ServiceResetListenerTest.php b/src/Symfony/Component/HttpKernel/Tests/Middleware/ServiceResetMiddlewareTest.php
similarity index 58%
rename from src/Symfony/Component/HttpKernel/Tests/EventListener/ServiceResetListenerTest.php
rename to src/Symfony/Component/HttpKernel/Tests/Middleware/ServiceResetMiddlewareTest.php
index 603d11b2bf412..9ce869f225922 100644
--- a/src/Symfony/Component/HttpKernel/Tests/EventListener/ServiceResetListenerTest.php
+++ b/src/Symfony/Component/HttpKernel/Tests/Middleware/ServiceResetMiddlewareTest.php
@@ -1,17 +1,21 @@
buildContainer();
- $container->get('reset_subscriber')->onKernelTerminate();
+ $container->get('reset_middleware')->handle(new Request());
+
+ $this->assertEquals(0, ResettableService::$counter);
+ $this->assertEquals(0, ClearableService::$counter);
+ }
+
+ public function testNoResetOnSubRequests()
+ {
+ $container = $this->buildContainer();
+ $container->get('one');
+ $container->get('reset_middleware')->handle(new Request(), HttpKernelInterface::SUB_REQUEST);
$this->assertEquals(0, ResettableService::$counter);
$this->assertEquals(0, ClearableService::$counter);
@@ -32,7 +46,7 @@ public function testResetServicesPartially()
{
$container = $this->buildContainer();
$container->get('one');
- $container->get('reset_subscriber')->onKernelTerminate();
+ $container->get('reset_middleware')->handle(new Request());
$this->assertEquals(1, ResettableService::$counter);
$this->assertEquals(0, ClearableService::$counter);
@@ -42,9 +56,9 @@ public function testResetServicesTwice()
{
$container = $this->buildContainer();
$container->get('one');
- $container->get('reset_subscriber')->onKernelTerminate();
+ $container->get('reset_middleware')->handle(new Request());
$container->get('two');
- $container->get('reset_subscriber')->onKernelTerminate();
+ $container->get('reset_middleware')->handle(new Request());
$this->assertEquals(2, ResettableService::$counter);
$this->assertEquals(1, ClearableService::$counter);
@@ -58,9 +72,12 @@ private function buildContainer()
$container = new ContainerBuilder();
$container->register('one', ResettableService::class)->setPublic(true);
$container->register('two', ClearableService::class)->setPublic(true);
+ $container->register(HttpKernel::class, HttpKernelInterface::class)
+ ->setSynthetic(true);
- $container->register('reset_subscriber', ServiceResetListener::class)
+ $container->register('reset_middleware', ServiceResetMiddleware::class)
->setPublic(true)
+ ->addArgument(new Reference(HttpKernel::class))
->addArgument(new IteratorArgument(array(
'one' => new Reference('one', ContainerInterface::IGNORE_ON_UNINITIALIZED_REFERENCE),
'two' => new Reference('two', ContainerInterface::IGNORE_ON_UNINITIALIZED_REFERENCE),
@@ -72,6 +89,13 @@ private function buildContainer()
$container->compile();
+ $kernelMock = $this->createMock(HttpKernelInterface::class);
+ $kernelMock->expects($this->any())
+ ->method('handle')
+ ->willReturn(new Response());
+
+ $container->set(HttpKernel::class, $kernelMock);
+
return $container;
}
}
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