我的控制器代码是这样构建的:
$connection = ConnectionManager::get('default');
$connection->begin();
try {
//Some logic here to create entities, validate and save them
//This code can throw exceptions
$connection->commit();
}
catch (Exception $e) {
$connection->rollback();
}
这是在 CakePHP 中使用事务的正确方法吗?如果确实抛出异常,事务将正确回滚,但会显示警告:
Warning: The connection is going to be closed but there is an active transaction.
我想,我在某处错过了一个重要的点,因为我不明白为什么要发出这个警告。我一直认为,无论是commit()
还是rollback()
都会完成交易。我错了吗?
好的,所以我从 2 或 3 个月以来一直在尝试找到这个问题的原因,就在我问了这个问题之后,我找到了!这是堆栈溢出的魔法,大家。
我的例外从未被抓住,因为我错过了catch
指令中的。由于我的代码位于控制器中,因此 PHP 假定只捕获一个
AppControllerException
(默认控制器命名空间(。若要捕获所有异常,代码必须
catch (Exception $e) {
容易。