您可以使用订阅者监听SalesChannelContextResolvedEvent
,并将当前请求堆栈中的路径信息作为扩展添加到Context
的实例中.在您的FlowAction
实现中,您可以获得Context
的实例以及随后添加的带有路径的扩展.
<service id="SwagBasicExample\Subscriber\SalesChannelContextResolvedSubscriber">
<argument type="service" id="request_stack"/>
<tag name="kernel.event_subscriber"/>
</service>
use Shopware\Core\Content\Cms\SalesChannel\Struct\TextStruct;
use Shopware\Core\Framework\Routing\Event\SalesChannelContextResolvedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RequestStack;
class SalesChannelContextResolvedSubscriber implements EventSubscriberInterface
{
private RequestStack $requestStack;
public function __construct(RequestStack $requestStack)
{
$this->requestStack = $requestStack;
}
public static function getSubscribedEvents(): array
{
return [
SalesChannelContextResolvedEvent::class => 'onSalesChannelContextResolved',
];
}
public function onSalesChannelContextCreated(SalesChannelContextResolvedEvent $event): void
{
$context = $event->getSalesChannelContext()->getContext();
$request = $this->requestStack->getMainRequest();
if (!$request) {
return;
}
$context->addExtension(
'currentRequestPath',
new TextStruct($request->getPathInfo())
);
}
}
然后在您的FlowAction
实施中:
public function handle(FlowEvent $event): void
{
$currentRequestPathExtension = $event->getContext()->getExtension('currentRequestPath');
$pathInfo = null;
if ($currentRequestPathExtension instanceof TextStruct) {
$pathInfo = $currentRequestPathExtension->getContent();
}
// ...
}