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 で推奨され、可能かどうかはわかりません。そうでない場合は、別のアプローチがあるか、従来のアプローチに固執する必要がある場合は、助けていただければ幸いです。
ありがとうございました。