1、定义事务处理接口

  1. <?php
  2.  
  3. namespace frontend\business\SaveRecordByransactions;
  4.  
  5. /**
  6. * Interface ISaveForTransaction 事物提交接口
  7. * @package frontend\business\RewardTransactions
  8. */
  9. interface ISaveForTransaction
  10. {
  11. function SaveRecordForTransaction(&$error,&$outInfo);
  12. }

2、新建统一事务处理的方法类

  1. <?php
  2.  
  3. namespace frontend\business;
  4.  
  5. use frontend\business\SaveRecordByransactions\ISaveForTransaction;
  6. use yii\base\Exception;
  7. use yii\db\Transaction;
  8. use yii\log\Logger;
  9.  
  10. class SaveByTransUtil
  11. {
  12. /**
  13. * 事物保存支持
  14. * @param $objList 需要保存的对象数组,
  15. * @param $error
  16. * @return bool
  17. * @throws \yii\db\Exception
  18. */
  19. public static function RewardSaveByTransaction($objList,&$error,&$outInfo = null)
  20. {
  21. $error ='';
  22. if(!isset($objList) || !is_array($objList))
  23. {
  24. $error = '非法对象,不是数组';
  25. return false;
  26. }
  27. foreach($objList as $obj)
  28. {
  29. if(!($obj instanceof ISaveForTransaction))
  30. {
  31. $error = '对象数组中存在非ISaveForTransaction对象';
  32. return false;
  33. }
  34. }
  35. $outInfo = [];
  36. $trans = \Yii::$app->db->beginTransaction(Transaction::REPEATABLE_READ);
  37. try
  38. {
  39. foreach($objList as $obj)
  40. {
  41. if(!$obj->SaveRecordForTransaction($error,$outInfo))
  42. {
  43. if(is_array($error))
  44. {
  45. \Yii::getLogger()->log(var_export($error,true).' type:'.var_export($obj,true),Logger::LEVEL_ERROR);
  46. }
  47. else
  48. {
  49. \Yii::getLogger()->log($error.' type:'.var_export($obj,true),Logger::LEVEL_ERROR);
  50. }
  51. $trans->rollBack();
  52. return false;
  53. }
  54. }
  55. $trans->commit();
  56. }
  57. catch(Exception $e)
  58. {
  59. $error = $e->getMessage();
  60. $trans->rollBack();
  61. return false;
  62. }
  63. return true;
  64. }
  65. }

3、要进行事务处理的方法类必须继承事务处理接口ISaveForTransaction 并重写里面的SaveRecordForTransaction方法

  1. <?php
  2.  
  3. namespace frontend\business\SaveRecordByransactions\SaveByTransaction;
  4.  
  5. use frontend\business\SaveRecordByransactions\ISaveForTransaction;
  6. use yii\base\Exception;
  7.  
  8. /**
  9. * 修改增加实际豆数
  10. * Class ModifyBalanceByTicketToCash
  11. * @package frontend\business\UserAccountBalanceActions
  12. */
  13. class ModifyBalanceByAddRealBean implements ISaveForTransaction
  14. {
  15. private $balance = null;
  16. private $extend_params=[];
  17.  
  18. /**
  19. * @param $record
  20. * @param array $extend_params
  21. * @throws Exception
  22. */
  23. public function __construct($record,$extend_params=[])
  24. {
  25. $this->balance = $record;
  26. $this->extend_params = $extend_params;
  27. }
  28.  
  29. public function SaveRecordForTransaction(&$error,&$outInfo)
  30. {
  31. //逻辑处理
  32. return true;
  33. }
  34. }

4、调用事务处理

实例化不同业务处理类到数组$transActions,最后统一调用事务处理方法RewardSaveByTransaction

  1. <?php
  2. $transActions = [];
  3. $transActions[] = new ModifyBalanceByAddRealBean($userBalance,$param);
  4. $transActions[] = new ModifyGift($params);
  5.  
  6. if(!SaveByTransUtil::RewardSaveByTransaction($transActions,$error))
  7. {
  8. return false;
  9. }

  

  1.  

Yii 框架不同逻辑处理方法统一事务处理的更多相关文章

  1. 【yii2】 yii框架如果控制器和方法都是多个单词组成应该怎样写请求链接

    最近的一个项目碰到这种问题,摸索出了解决办法,故此记录下 example 如果控制器为 ShopCollect 方法为 UserList solution 请求的链接应该为 doman.com/sho ...

  2. YII框架源码分析(百度PHP大牛创作-原版-无广告无水印)

           YII 框架源码分析    百度联盟事业部——黄银锋 目 录 1. 引言 3 1.1.Yii 简介 3 1.2.本文内容与结构 3 2.组件化与模块化 4 2.1.框架加载和运行流程 4 ...

  3. PHP开发框架之YII框架学习——碾压ThinkPHP不是梦

      前  言 JRedu 程序猿是一种慵懒的生物!能少敲一行代码,绝对不会多敲一个字符!所以,越来越多的开发框架应运而生,在帮助我们完成功能的同时,极大程度上也帮我们节省了人力物力,而且也提高了系统的 ...

  4. yii框架的部署方法

    yii框架(yii framework)的部署方法 刚開始学习的人来说,部署yii框架还是有一定难度的,Yii是一个基于组件.用于开发大型 Web 应用的高性能 PHP 框架.Yii提供了今日Web ...

  5. Yii框架CURD方法

    在YII框架中,CURD有2种方式: 1.AR模式:2. DAO模式 AR模式下 查全部   MODEL  $model->find()->asArray()->all()查单 个  ...

  6. YII框架的使用

    YII框架的使用 spit: 吐痰,吐口水, 过去式: spat spat: 本身也可以作为一个单词, 意思是: "小打小闹""小的吵闹""小争吵&q ...

  7. 使用 OAuth2-Server-php 在 Yii 框架上搭建 OAuth2 Server

    原文转自 http://www.cnblogs.com/ldms/p/4565547.html Yii 有很多 extension 可以使用,在查看了 Yii 官网上提供的与 OAuth 相关的扩展后 ...

  8. Yii 框架学习--01 框架入门

    Yii 是一个高性能的,适用于开发 WEB2.0 应用的 PHP 框架. Yii目前有两个主要的版本: 2.0 和 1.1.本文以YII 2.0.7为例. 环境需求 Yii2.0 框架有一些系统上的需 ...

  9. yii框架

    Yii Framework是一个基于组件.用于开发大型 Web 应用的高性能 PHP 框架.Yii提供了今日Web 2.0应用开发所需要的几乎一切功能.Yii是最有效率的PHP框架之一.Yii是创始人 ...

随机推荐

  1. alpha冲刺(2/10)

    前言 队名:旅法师 作业链接 队长博客 燃尽图 会议 会议照片 会议内容 陈晓彬(组长) 今日进展: 召开会议 安排任务 博客撰写 构建之法的阅读 问题困扰: 分配任务,还是不熟练,对后台不熟悉,不知 ...

  2. 同一台电脑中同时安装oracle database 服务器端和oracle client 客户端时注意

    如果在一台电脑中同时安装oracle的客户端和服务器端软件, 一定要先安装oracle database 服务端,并进行相应的配置 listener.ORA. 然后再去安装oracle client ...

  3. java web(七): mybatis的动态sql和mybatis generator自动生成pojo类和映射文件

    前言: MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据 不同条件拼接 SQL 语句的痛苦.例如拼接时要确保不能忘记添加必要的空格,还 ...

  4. 回顾HashMap

    一.HashMap的原理简述 HashMap是基于哈希表的非线程安全的Map实现,内部采用数组+链表实现,其内部类Node定义了数据元素类型,它扩展了Map.Entry<K,V>增加了指向 ...

  5. cmake编译obs

    https://blog.csdn.net/su_vast/article/details/74984213 https://blog.csdn.net/u011258240/article/deta ...

  6. 对数据进行GZIP压缩或解压缩

    /** * 对data进行GZIP解压缩 * @param data * @return * @throws Exception */ public static String unCompress( ...

  7. 廖雪峰Java7处理日期和时间-4最佳实践-最佳实践

    jdk提供了2套新旧的API来处理日期和时间. java.util * Date * Calendar java.time(JDK>=1.8) * Localdate * LocalTime * ...

  8. Java中常用类(包装类扩展知识)

    Java常用类有哪些? 八大基本数据类型的包装类 包装类均位于java.lang包中,包装类和基本数据类型的对应关系如下表: 基本数据类型 包装类 byte Byte boolean Boolean ...

  9. 好看的java集合类图

    http://blog.csdn.net/iamzp2008/article/details/38151971?utm_source=tuicool&utm_medium=referral 现 ...

  10. linux拷贝文件夹cp

    方法就是: cp -r dir dir 如果只是拷贝文件的话直接cp即可