Yii 框架不同逻辑处理方法统一事务处理
1、定义事务处理接口
<?php namespace frontend\business\SaveRecordByransactions; /**
* Interface ISaveForTransaction 事物提交接口
* @package frontend\business\RewardTransactions
*/
interface ISaveForTransaction
{
function SaveRecordForTransaction(&$error,&$outInfo);
}
2、新建统一事务处理的方法类
<?php namespace frontend\business; use frontend\business\SaveRecordByransactions\ISaveForTransaction;
use yii\base\Exception;
use yii\db\Transaction;
use yii\log\Logger; class SaveByTransUtil
{
/**
* 事物保存支持
* @param $objList 需要保存的对象数组,
* @param $error
* @return bool
* @throws \yii\db\Exception
*/
public static function RewardSaveByTransaction($objList,&$error,&$outInfo = null)
{
$error ='';
if(!isset($objList) || !is_array($objList))
{
$error = '非法对象,不是数组';
return false;
}
foreach($objList as $obj)
{
if(!($obj instanceof ISaveForTransaction))
{
$error = '对象数组中存在非ISaveForTransaction对象';
return false;
}
}
$outInfo = [];
$trans = \Yii::$app->db->beginTransaction(Transaction::REPEATABLE_READ);
try
{
foreach($objList as $obj)
{
if(!$obj->SaveRecordForTransaction($error,$outInfo))
{
if(is_array($error))
{
\Yii::getLogger()->log(var_export($error,true).' type:'.var_export($obj,true),Logger::LEVEL_ERROR);
}
else
{
\Yii::getLogger()->log($error.' type:'.var_export($obj,true),Logger::LEVEL_ERROR);
}
$trans->rollBack();
return false;
}
}
$trans->commit();
}
catch(Exception $e)
{
$error = $e->getMessage();
$trans->rollBack();
return false;
}
return true;
}
}
3、要进行事务处理的方法类必须继承事务处理接口ISaveForTransaction 并重写里面的SaveRecordForTransaction方法
<?php namespace frontend\business\SaveRecordByransactions\SaveByTransaction; use frontend\business\SaveRecordByransactions\ISaveForTransaction;
use yii\base\Exception; /**
* 修改增加实际豆数
* Class ModifyBalanceByTicketToCash
* @package frontend\business\UserAccountBalanceActions
*/
class ModifyBalanceByAddRealBean implements ISaveForTransaction
{
private $balance = null;
private $extend_params=[]; /**
* @param $record
* @param array $extend_params
* @throws Exception
*/
public function __construct($record,$extend_params=[])
{
$this->balance = $record;
$this->extend_params = $extend_params;
} public function SaveRecordForTransaction(&$error,&$outInfo)
{
//逻辑处理
return true;
}
}
4、调用事务处理
实例化不同业务处理类到数组$transActions,最后统一调用事务处理方法RewardSaveByTransaction
<?php
$transActions = [];
$transActions[] = new ModifyBalanceByAddRealBean($userBalance,$param);
$transActions[] = new ModifyGift($params); if(!SaveByTransUtil::RewardSaveByTransaction($transActions,$error))
{
return false;
}
Yii 框架不同逻辑处理方法统一事务处理的更多相关文章
- 【yii2】 yii框架如果控制器和方法都是多个单词组成应该怎样写请求链接
最近的一个项目碰到这种问题,摸索出了解决办法,故此记录下 example 如果控制器为 ShopCollect 方法为 UserList solution 请求的链接应该为 doman.com/sho ...
- YII框架源码分析(百度PHP大牛创作-原版-无广告无水印)
YII 框架源码分析 百度联盟事业部——黄银锋 目 录 1. 引言 3 1.1.Yii 简介 3 1.2.本文内容与结构 3 2.组件化与模块化 4 2.1.框架加载和运行流程 4 ...
- PHP开发框架之YII框架学习——碾压ThinkPHP不是梦
前 言 JRedu 程序猿是一种慵懒的生物!能少敲一行代码,绝对不会多敲一个字符!所以,越来越多的开发框架应运而生,在帮助我们完成功能的同时,极大程度上也帮我们节省了人力物力,而且也提高了系统的 ...
- yii框架的部署方法
yii框架(yii framework)的部署方法 刚開始学习的人来说,部署yii框架还是有一定难度的,Yii是一个基于组件.用于开发大型 Web 应用的高性能 PHP 框架.Yii提供了今日Web ...
- Yii框架CURD方法
在YII框架中,CURD有2种方式: 1.AR模式:2. DAO模式 AR模式下 查全部 MODEL $model->find()->asArray()->all()查单 个 ...
- YII框架的使用
YII框架的使用 spit: 吐痰,吐口水, 过去式: spat spat: 本身也可以作为一个单词, 意思是: "小打小闹""小的吵闹""小争吵&q ...
- 使用 OAuth2-Server-php 在 Yii 框架上搭建 OAuth2 Server
原文转自 http://www.cnblogs.com/ldms/p/4565547.html Yii 有很多 extension 可以使用,在查看了 Yii 官网上提供的与 OAuth 相关的扩展后 ...
- Yii 框架学习--01 框架入门
Yii 是一个高性能的,适用于开发 WEB2.0 应用的 PHP 框架. Yii目前有两个主要的版本: 2.0 和 1.1.本文以YII 2.0.7为例. 环境需求 Yii2.0 框架有一些系统上的需 ...
- yii框架
Yii Framework是一个基于组件.用于开发大型 Web 应用的高性能 PHP 框架.Yii提供了今日Web 2.0应用开发所需要的几乎一切功能.Yii是最有效率的PHP框架之一.Yii是创始人 ...
随机推荐
- 几种数据格式的处理 - Python
1. CSV数据 import csv csvfile = open('data_text.csv','rb') reader = csv.reader(csvfile) # 返回数据为列表类型 # ...
- How to Install Tomcat 8.0.27 on CentOS/RHEL and Ubuntu【转】
https://tecadmin.net/install-tomcat-8-on-centos-rhel-and-ubuntu/ Apache Tomcat is an opensource web ...
- Ubuntu16.04中pip无法更新升级,采用源码方式安装
1.从pip官网下载最新版 https://pypi.org/project/pip/#files 2.ubuntu中创建文件位置,我的放在一下路径,之后进行解压 3.解压后进入pip的文件夹,在执行 ...
- MySQL:日期函数、时间函数总结(MySQL 5.X)
http://www.cnblogs.com/she27/archive/2009/01/16/1377089.html 原文:http://www.51sdj.com/phpcms/picture/ ...
- Eclipse Java EE IDE for Web Developers集成的Maven 3 指向自己安装的 Maven
一.配置Maven环境 1.下载apache-maven文件,选择自己需要的版本,地址:Apache 官方下载地址是http://maven.apache.org/download.cgi 2.下载并 ...
- ANSI编码导致的乱码
美帝那边的一个 donet 项目,打开后发现一段string里面各种乱码.一通折腾后发现是编码格式问题.这段string所在的类文件保存格式为ANSI,而不是VS默认的UTF-8. ANSI编码电脑是 ...
- 在Docker中监控Java应用程序的5个方法
译者注:Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化.通常情况下,监控的主要目的在于:减少宕机 ...
- Ubuntu 16.04 安装 JDK 1.8
系统环境 Ubuntu 16.04; JDK 1.8 配置安装 1.首先从oracle下载jdk 1.8,我下载的版本是jdk-8u131-linux-x64.tar.gz,运行tar zvxf jd ...
- vim中行末去掉^M
方式1: 输入 :%s/^M//g 方式2: 输入:%s/\r//g
- WordPress版微信小程序2.2.0版发布
2017年8月12日WordPress版微信小程序2.2.0版通过了微信的审核正式发布,此版本的更新以完善功能为主.主要更新的功能是:站内链接,猜你喜欢,热点文章. WordPress版微信小程序开放 ...