1

我想在 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 中是否可取和可行,如果不是,如果有另一种方法或者我必须坚持传统方法,我将不胜感激。

谢谢你。

4

1 回答 1

0

您必须开始交易:

protected function preFilter($filterChain)

并提交,回滚:

protected function postFilter($filterChain)
于 2013-10-02T11:14:22.693 回答