3

为了确保我的操作能够正确处理事务,我发现自己在控制器中一遍又一遍地重复此代码:

/**
 * @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,这将类似于容器管理的事务。

对此有捆绑(或其他不错的解决方案)吗?

4

2 回答 2

2

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

PluessDoctrineTrxBundle完全符合我的要求您为您的操作添加注释,并且所有条令操作都包含在事务中。

于 2013-02-16T10:34:01.387 回答
0

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

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

在示例中,作者获取了一个名为 @Transactional 的注解,类似于 nameshake Spring 的注解:

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

于 2016-10-19T11:45:31.470 回答