为了确保我对正确的事务处理采取行动,我发现自己一遍又一遍地在控制器中重复这段代码:
/**
* @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,那就像集装箱管理的交易一样。
是否有捆绑(或其他好的解决方案)?
答案 0 :(得分:2)
由于我没有找到解决方案,所以我决定创建一个。
PluessDoctrineTrxBundle完全符合我的要求。 Yous为您的操作添加注释,所有学说操作都由转换覆盖。
答案 1 :(得分:0)
您可以使用JMSAopBundle在Symfony2中实现带有AOP的包装器。这个步骤详细说明了这些步骤:
http://jmsyst.com/bundles/JMSAopBundle#transaction-management
在这个例子中,作者得到了一个名为@Transactional的注释,就像名字叫Spring的注释一样: