我想在 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();
}
}
这是我的用户类中的过滤器方法:
public function filters()
{
return array(
'accessControl',
'postOnly + delete',
array('application.components.TransactionFilter + create'),
);
}
我假设 $filterChain->run() 最终会执行该操作,但是当操作中有重定向时会出现问题,它从未在过滤器中的 $filterChain->run() 语句之后完成
我不知道这种方法在 Yii 中是否可取和可行,如果不是,如果有另一种方法或者我必须坚持传统方法,我将不胜感激。
谢谢你。