首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Symfony2服务响应

Symfony2服务响应
EN

Stack Overflow用户
提问于 2015-03-30 23:44:04
回答 1查看 218关注 0票数 0

我试图设置一个通用服务来处理我在项目中经常使用的通用功能。例如,如果用户想要购买虚拟货币的东西,就会有一个功能来检查用户的账户中是否有足够的虚拟货币。

如果用户没有足够的虚拟货币,我希望此函数做出JSOn响应,但当然,只允许控制器响应。但这意味着我必须检查我使用此函数的每个操作,无论购买是否有效。

下面是我的控制器中的函数调用:

代码语言:javascript
运行
复制
$purchaes= $this->get('global_functions')->payVirtualCurrency($user_id,  $currency_amount);
if($change instanceof JsonResponse){
    return $change;
}

和函数:

代码语言:javascript
运行
复制
public function payVirtualCurrency($user_id, $currency_amount){
    $user = $this->dm->getRepository('LoginBundle:User')->findOneById($user_id);
    if($user->getVirtualCurrency() < $currency_amount){
        return new JsonResponse(array('error' => $this->trans->trans('Insufficient amount of virtual Currency')));
    }
    return true;
}

有没有更好的方法来做这件事?我真的想避免在控制器中一遍又一遍地做同样的事情。

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2015-03-31 01:09:44

我想到了两个选择,这两个都是非常优雅的解决方案,但都需要很少的工作:

1.创建自定义异常监听器

创建自定义异常,让我们称其为InsufficientMoneyException。然后,您的服务可以保持原样,但不是返回响应,而是抛出自定义异常(以防用户没有足够的钱)。然后,执行create custom exception listener,它将侦听InsufficientMoneyException自定义异常并返回所需的JsonResponse

2.创建自定义注释

您可以创建自定义注释,并使用此注释标记控制器操作。它看起来就像这样

代码语言:javascript
运行
复制
/**
* @MinimumMoneyRequired("50")
*/
public function buyAction()
{
(...)
}

这个选项真的很好,而且是解耦的,但它需要相当多的配置。这是一个很好的blog post,详细描述了如何创建自定义注释

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29350517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档