我有一个特定的问题,我必须将变量传递到自定义控制器中的模板,但我无法使用POST
或GET
请求(原因是执行重定向的函数只发送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]
);
}