在symfony2中寻找控制器动作的@transaction

时间:2013-01-11 08:24:46

标签: symfony transactions controller doctrine

为了确保我对正确的事务处理采取行动,我发现自己一遍又一遍地在控制器中重复这段代码:

/**
 * @Route("/complete", name = "authentication_complete")
 */
public function completeAction(Request $request)
{
    $result = null;
    try {
        $this->getManager()->beginTransaction();

        $result = $this->doCompleteAction($request);

        $this->getManager()->flush();
        $this->getManager()->commit();
    } catch (\Exception $e) {
        // @codeCoverageIgnoreStart
        $this->getManager()->rollback();
        throw $e;
        // @codeCoverageIgnoreEnd
    }

    return $result;
}

public function doCompleteAction(Request $request)
{
    // do whatever you action is suposed to do
    return $response;
}

我想要@ManageTransaction之类的东西。这将进入行动的评论,并为我节省了许多疑问代码。在一个完美的世界中,这也将以巧妙的方式处理控制器前锋。

如果你了解Java EE,那就像集装箱管理的交易一样。

是否有捆绑(或其他好的解决方案)?

2 个答案:

答案 0 :(得分:2)

由于我没有找到解决方案,所以我决定创建一个。

PluessDoctrineTrxBundle完全符合我的要求。 Yous为您的操作添加注释,所有学说操作都由转换覆盖。

答案 1 :(得分:0)

您可以使用JMSAopBundle在Symfony2中实现带有AOP的包装器。这个步骤详细说明了这些步骤:

http://jmsyst.com/bundles/JMSAopBundle#transaction-management

在这个例子中,作者得到了一个名为@Transactional的注释,就像名字叫Spring的注释一样:

http://docs.spring.io/spring-framework/docs/4.2.x/spring-framework-reference/html/transaction.html#transaction-declarative-annotations