在没有GET/POST请求参数的情况下将变量传递到自定义控制器中的模板



我有一个特定的问题,我必须将变量传递到自定义控制器中的模板,但我无法使用POSTGET请求(原因是执行重定向的函数只发送GET请求,我不希望参数对最终用户可见(。

有没有办法设置全局变量并将其附加到上下文或会话?我也尝试使用RequestDataBag,但重定向后我无法访问以前设置的数据。

以下是我尝试做的:

public function pay(AsyncPaymentTransactionStruct $transaction, RequestDataBag $dataBag, SalesChannelContext $salesChannelContext): RedirectResponse
{
$returnUrl = $transaction->getReturnUrl();
$dataBag->add(['test' => 'test1']);
return new RedirectResponse('/checkout/confirm/custom-controller');
}

并试图在控制器中捕获它:

public function cliffMarketsBerrySimplify(Request $request, SalesChannelContext $context, RequestDataBag $dataBag)
{
$data = $dataBag->get('test');
return $this->renderStorefront('@plugin/storefront/page/checkout/payment/custom-template.html.twig');
}

但是$data是空的。有没有其他方法可以解决这个问题。是否可以设置全局上下文变量或将变量附加到会话,然后检索它?

我在Shopware6的自定义支付插件中遇到了同样的问题,我使用会话来解决它。

首先在您的支付处理程序中注入session,然后将您的变量存储在会话中:

public function pay(AsyncPaymentTransactionStruct $transaction, RequestDataBag $dataBag, SalesChannelContext $salesChannelContext): RedirectResponse
{
$returnUrl = $transaction->getReturnUrl();
$this->session->set('test', 'test1');
return new RedirectResponse('/checkout/confirm/custom-controller');
}

然后从控制器中的会话中读取变量,并将其传递给模板:

public function cliffMarketsBerrySimplify(Request $request, SalesChannelContext $context, RequestDataBag $dataBag)
{
$data = $this->session->remove('test');
return $this->renderStorefront(
'@plugin/storefront/page/checkout/payment/custom-template.html.twig',
['data' => $data]
);
}

最新更新