我想在Yii中创建一个TransactionFilter,将其应用于一个动作以将其包装在一个事务中,所以我不必每次想要使用事务时都反复编写相同的代码,至少这是个想法。我有
class TransactionFilter extends CFilter
{
public function filter($filterChain)
{
if(Yii::app()->getRequest()->getIsPostRequest())
{
$transaction= Yii::app()->db->beginTransaction();
try {
$filterChain->run();
$transaction->commit();
}catch(Exception $e) {
$transaction->rollback();
}
}
else
$filterChain->run();
}
}
这是我的User类中的过滤器方法:
public function filters()
{
return array(
'accessControl',
'postOnly + delete',
array('application.components.TransactionFilter + create'),
);
}
我假设$ filterChain-> run()最终将执行操作但是当操作中有重定向时出现问题,它从未在过滤器中的$ filterChain-> run()句子之后出现
我不知道这种方法在Yii中是否可取和可行,如果不是,如果有其他方法或者我必须坚持使用传统方法,我会很感激帮助。
谢谢。
答案 0 :(得分:0)
您必须开始交易:
protected function preFilter($filterChain)
并提交,回滚:
protected function postFilter($filterChain)