使用最新PayumBundle生成CaptureToken时如何添加路由必填参数?
解决Payum Bundle CaptureToken路由必填参数缺失问题
我之前也碰到过一模一样的情况,当目标路由带有必填参数时,直接传路由名称肯定会触发参数缺失的错误,这里有个简单可行的解决思路:
核心逻辑是先生成包含必填参数的完整目标URL,再将这个URL传入createCaptureToken方法,而不是直接传递路由名称。具体操作步骤如下:
- 首先在你的控制器(或服务)中注入Symfony的
UrlGeneratorInterface,用来生成带参数的路由URL:
use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; class PaymentController extends AbstractController { public function initiatePayment(UrlGeneratorInterface $urlGenerator) { // 后续代码写在这里 } }
- 使用
generate方法生成带有必填参数的done_xyz路由完整URL:
// 假设你的必填参数值是$requiredParam,比如订单ID、用户ID这类业务值 $doneUrl = $urlGenerator->generate( 'done_xyz', ['parameter' => $requiredParam], // 传入路由要求的必填参数 UrlGeneratorInterface::ABSOLUTE_URL // 务必生成绝对URL,Payum对此有要求 );
- 最后把生成好的
$doneUrl传给createCaptureToken的第三个参数:
$captureToken = $this->get('payum')->getTokenFactory()->createCaptureToken( $gatewayName, $payment, $doneUrl // 这里传递带参数的完整URL,而非路由名称 );
这样生成的CaptureToken就会正确指向带有必填参数的目标路由,不会再出现参数缺失的提示了。另外要注意,Payum要求跳转的目标URL必须是绝对URL,所以生成时一定要加上UrlGeneratorInterface::ABSOLUTE_URL参数,否则可能会出现跳转失败的问题。
内容的提问来源于stack exchange,提问作者john Smith
相关产品推荐
相关产品推荐

