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();
        }
}

これは、私の User クラスのフィルター メソッドです。

public function filters()
{
    return array(
        'accessControl',
        'postOnly + delete',
        array('application.components.TransactionFilter + create'),
    );
}

$filterChain->run() が最終的にアクションを実行すると想定していますが、アクションにリダイレクトがあると問題が発生し、フィルターの $filterChain->run() 文の後にリダイレクトされませんでした

このアプローチが Yii で推奨され、可能かどうかはわかりません。そうでない場合は、別のアプローチがあるか、従来のアプローチに固執する必要がある場合は、助けていただければ幸いです。

ありがとうございました。

4

1 に答える 1