如何使用JMS paymentCoreBundle将Order对象传递给detailsAction和CompleteAc



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

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

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

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

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

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

我认为,如果我不传递Order对象,我会出错。那么,最好的方法是什么以及如何做到这一点呢?

新开发和Symfony,我真的很想了解,而不是简单地复制/粘贴。

任何帮助都将不胜感激。

您可以使用@ParamConverter注释将订单号转换为其实体

http://symfony.com/doc/current/bundles/SensioFrameworkExtraBundle/annotations/converters.html

use SensioBundleFrameworkExtraBundleConfigurationParamConverter;
...
/**
* @Route("/{orderNumber}/complete", name = "payment_complete")
* @ParamConverter("order", options={"mapping": {"orderNumber": "orderNumber"}})
*/
public function completeAction(Order $order){
...
}

更新:再次阅读您的问题,有点困惑。那么,您是否在获取$order时遇到了问题(错误),或者您只是混淆了为什么传递OrderNumber,但却获取order实体?

如果是这样的话,就忽略我的第一个例子:

/**
* @Route("/{orderNumber}/details", name = "payment_details")
* @Template
*/
public function detailsAction(Order $order)

这意味着ParameterConverter将神奇地将传递的orderNumber转换为实体Order,这实际上是Symfony doc推荐的"最佳实践"方法:http://symfony.com/doc/2.3/best_practices/controllers.html#using-参数转换器

并且您不需要为这种情况下的添加额外的注释

您认为会出现错误,但实际发生错误了吗?

您为JSMPaymentCoreBundel阅读的文档是绝对正确的。如果您在控制器操作中键入hint参数,则如果找到,路由占位符将转换为相应的对象。查看叶甫根尼发布的链接。你没有甚至需要使用ParamConverter

use SensioBundleFrameworkExtraBundleConfigurationRoute;
use SensioBundleBlogBundleEntityPost;
/**
* @Route("/blog/{id}")
*/
public function showAction(Post $post)
{
//your code here
}

幕后发生了几件事:

转换器试图从请求属性中获取SensioBlogBundle:Post对象(请求属性来自路由占位符——这里是id);

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新