如何使用JMS payementCoreBundle将Order对象传递给detailsAction和CompleteAction

Ben*_*cas 13 symfony jmspaymentpaypalbundle

我需要为应用程序进行支付交易,我看到了JSMPaymentCoreBundle.

我阅读了JSMPaymentCoreBundel的文档,但我想知道如何将对象传递给控制器​​detailsAction(Order $ order)和completeAction(Order $ order).

例如,在detailAction控制器中,重定向响应如下所示:

return new RedirectResponse($this->router->generate('payment_complete', array('orderNumber' => $order->getOrderNumber(),)));
Run Code Online (Sandbox Code Playgroud)

对我来说,我们不会将参数中所需的Order对象传递给下面的completeAction控制器,但只传递orderNumer:

/**
* @Route("/{orderNumber}/complete", name = "payment_complete")
*/
public function completeAction(Order $order){
    ...
}
Run Code Online (Sandbox Code Playgroud)

我认为如果我不传递Order对象,我会收到错误.那么最好的方法是什么呢?

新的开发和Symfony,我真的想要理解而不是简单地复制/粘贴.

任何帮助将是欣赏.

Bro*_*cha 3

你认为你会得到错误,但你真的得到了错误吗?

您阅读的文档JSMPaymentCoreBundel绝对正确。如果您在控制器操作中键入提示参数,则路由占位符将转换为相应的对象(如果找到)。请参阅 Evgeniy 发布的链接。你甚至不需要使用ParamConverter

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\BlogBundle\Entity\Post;
/**
 * @Route("/blog/{id}")
 */
public function showAction(Post $post)
{
    //your code here
}
Run Code Online (Sandbox Code Playgroud)

幕后发生了几件事:

转换器尝试从请求属性中获取 SensioBlogBu​​ndle:Post 对象(请求属性来自路由占位符——此处为 id);

如果没有找到Post对象,则生成404 Response;

如果找到 Post 对象,则会定义一个新的 post 请求属性(可通过 $request->attributes->get('post') 访问);

至于其他请求属性,当存在于方法签名中时,它会自动注入控制器中。

如果您像上面的示例一样使用类型提示,您甚至可以完全省略 @ParamConverter 注释: