Yii 使用操作筛选器执行事务
我想在Yii中创建一个TransactionFilter,将其应用于一个操作,将其包装到一个事务中,这样我就不必每次使用事务时都反复编写相同的代码,至少这是我的想法。我有Yii 使用操作筛选器执行事务,yii,Yii,我想在Yii中创建一个TransactionFilter,将其应用于一个操作,将其包装到一个事务中,这样我就不必每次使用事务时都反复编写相同的代码,至少这是我的想法。我有 class TransactionFilter extends CFilter { public function filter($filterChain) { if(Yii::app()->getRequest()->getIsPostRequest()) {
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中是否可行,如果不可行,如果有其他方法或者我必须坚持传统方法,我将非常感谢您的帮助
谢谢。您必须在以下时间开始交易:
protected function preFilter($filterChain)
和提交、回滚:
protected function postFilter($filterChain)
我认为这有点不安全。当您有重定向时,事务应该提交还是回滚?如果transacion正在运行,您可以验证重定向方法并提交,这可能不是最好的解决方案。。。还有更多的方法,如
重定向
,其工作方式与之类似,如刷新
。