mirror of
https://github.com/Sylius/Sylius.git
synced 2026-07-05 20:57:12 +00:00
[Context] Fixed context to work with frankenphp worker mode
This commit is contained in:
parent
cbb32838fb
commit
513ce49bcc
6 changed files with 90 additions and 3 deletions
|
|
@ -20,6 +20,7 @@
|
|||
<service id="sylius.context.channel.cached" class="Sylius\Component\Channel\Context\CachedPerRequestChannelContext" decorates="sylius.context.channel" decoration-priority="256">
|
||||
<argument type="service" id="sylius.context.channel.cached.inner" />
|
||||
<argument type="service" id="request_stack" />
|
||||
<tag name="kernel.reset" method="reset" />
|
||||
</service>
|
||||
|
||||
<service id="sylius.context.shopper" class="Sylius\Component\Core\Context\ShopperContext" lazy="true">
|
||||
|
|
@ -34,6 +35,7 @@
|
|||
<argument type="service" id="sylius.context.cart.new_shop_based.inner" />
|
||||
<argument type="service" id="sylius.context.shopper" />
|
||||
<argument type="service" id="sylius.resolver.cart.created_by_guest_flag" />
|
||||
<tag name="kernel.reset" method="reset" />
|
||||
</service>
|
||||
<service id="sylius.context.cart.customer_and_channel_based" class="Sylius\Bundle\CoreBundle\Context\CustomerAndChannelBasedCartContext">
|
||||
<argument type="service" id="sylius.context.customer" />
|
||||
|
|
|
|||
|
|
@ -606,6 +606,34 @@ final class SyliusCoreExtensionTest extends AbstractExtensionTestCase
|
|||
yield 'preview' => ['preview', true];
|
||||
}
|
||||
|
||||
#[Test]
|
||||
public function it_registers_cached_channel_context_to_be_reset_between_requests(): void
|
||||
{
|
||||
$this->container->setParameter('kernel.environment', 'prod');
|
||||
|
||||
$this->load();
|
||||
|
||||
$this->assertContainerBuilderHasServiceDefinitionWithTag(
|
||||
'sylius.context.channel.cached',
|
||||
'kernel.reset',
|
||||
['method' => 'reset'],
|
||||
);
|
||||
}
|
||||
|
||||
#[Test]
|
||||
public function it_registers_shop_based_cart_context_to_be_reset_between_requests(): void
|
||||
{
|
||||
$this->container->setParameter('kernel.environment', 'prod');
|
||||
|
||||
$this->load();
|
||||
|
||||
$this->assertContainerBuilderHasServiceDefinitionWithTag(
|
||||
'sylius.context.cart.new_shop_based',
|
||||
'kernel.reset',
|
||||
['method' => 'reset'],
|
||||
);
|
||||
}
|
||||
|
||||
protected function getContainerExtensions(): array
|
||||
{
|
||||
return [new SyliusCoreExtension()];
|
||||
|
|
|
|||
|
|
@ -14,9 +14,10 @@ declare(strict_types=1);
|
|||
namespace Sylius\Bundle\PayumBundle\PaymentRequest\Context;
|
||||
|
||||
use Sylius\Component\Payment\Model\PaymentRequestInterface;
|
||||
use Symfony\Contracts\Service\ResetInterface;
|
||||
|
||||
/** @experimental */
|
||||
final class PaymentRequestContext implements PaymentRequestContextInterface
|
||||
final class PaymentRequestContext implements PaymentRequestContextInterface, ResetInterface
|
||||
{
|
||||
private ?PaymentRequestInterface $paymentRequest = null;
|
||||
|
||||
|
|
@ -39,4 +40,9 @@ final class PaymentRequestContext implements PaymentRequestContextInterface
|
|||
{
|
||||
$this->paymentRequest = null;
|
||||
}
|
||||
|
||||
public function reset(): void
|
||||
{
|
||||
$this->disable();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,9 @@
|
|||
>
|
||||
|
||||
<services>
|
||||
<service id="sylius_payum.context.payment_request" class="Sylius\Bundle\PayumBundle\PaymentRequest\Context\PaymentRequestContext" />
|
||||
<service id="sylius_payum.context.payment_request" class="Sylius\Bundle\PayumBundle\PaymentRequest\Context\PaymentRequestContext">
|
||||
<tag name="kernel.reset" method="reset" />
|
||||
</service>
|
||||
<service id="Sylius\Bundle\PayumBundle\PaymentRequest\Context\PaymentRequestContextInterface" alias="sylius_payum.context.payment_request" />
|
||||
</services>
|
||||
</container>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,42 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Sylius package.
|
||||
*
|
||||
* (c) Sylius Sp. z o.o.
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Sylius\Bundle\PayumBundle\Tests\DependencyInjection;
|
||||
|
||||
use PHPUnit\Framework\Attributes\Test;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\FileLocator;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
|
||||
|
||||
final class PaymentRequestContextServiceTest extends TestCase
|
||||
{
|
||||
#[Test]
|
||||
public function it_registers_payment_request_context_to_be_reset_between_requests(): void
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
$loader = new XmlFileLoader(
|
||||
$container,
|
||||
new FileLocator(__DIR__ . '/../../Resources/config/services/payment_request'),
|
||||
);
|
||||
$loader->load('context.xml');
|
||||
|
||||
$definition = $container->getDefinition('sylius_payum.context.payment_request');
|
||||
|
||||
self::assertSame(
|
||||
[['method' => 'reset']],
|
||||
$definition->getTag('kernel.reset'),
|
||||
'The payment request context must be tagged with "kernel.reset" so it is reset between worker requests.',
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -15,8 +15,9 @@ namespace Sylius\Component\Channel\Context;
|
|||
|
||||
use Sylius\Component\Channel\Model\ChannelInterface;
|
||||
use Symfony\Component\HttpFoundation\RequestStack;
|
||||
use Symfony\Contracts\Service\ResetInterface;
|
||||
|
||||
final class CachedPerRequestChannelContext implements ChannelContextInterface
|
||||
final class CachedPerRequestChannelContext implements ChannelContextInterface, ResetInterface
|
||||
{
|
||||
private \SplObjectStorage $requestToChannelMap;
|
||||
|
||||
|
|
@ -51,4 +52,10 @@ final class CachedPerRequestChannelContext implements ChannelContextInterface
|
|||
throw $exception;
|
||||
}
|
||||
}
|
||||
|
||||
public function reset(): void
|
||||
{
|
||||
$this->requestToChannelMap = new \SplObjectStorage();
|
||||
$this->requestToExceptionMap = new \SplObjectStorage();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue