2019-05-23 02:35:03 1411次浏览 2条回答 0 悬赏 10 金钱

在使用 Yii2 事务操作中,突然纠结异常的处理方式,看到项目中用到的三种方式:

1:业务逻辑层只负责抛出异常,不进行处理,在C层统一捕获并处理后返回

2:业务逻辑层负责处理异常并加工后再次抛出,C层在进行捕获并返回

3:所有的错误直接返回false(个人感觉无法快速定位问题并且也不友好)

以下是我现有的处理逻辑,感觉有点啰嗦,请多指点

控制器层

 public function actionSend()
{
    $pk_id = \Yii::$app->request->post('merchant_id');
    try {
        (new Merchant())->send($pk_id);
        return $this->outSuccess();
    } catch (\Exception $e) {
       //或者根据抛出的异常编码进行提示
        return $this->outError($e->getMessage());
    }
}

业务逻辑层

public function send($pk_id)
{
    $idsArray = is_array($pk_id) ? $pk_id : [$pk_id];
    $tran = \Yii::$app->db->beginTransaction();
    try {
        foreach ($idsArray as $id) {
            $item = SpiderMerchantModel::findOne($id)->attributes;
            if (!$item["category_id"]) {
                throw new Exception('请完整所选项目的分类');//或者返回错误编码
            }
            $merchantModel = new MerchantModel();
            if ($merchantModel->load($item, '') && $merchantModel->save()) {
                $tran->commit();
            } else {
                throw new Exception('保存失败'); //或者返回错误编码
            }
        }
    } catch (\Exception $e) {
        $tran->rollBack();
        throw $e;  //抛出异常
    }
}
`
您需要登录后才可以回答。登录 | 立即注册
qi-guozheng
实习生

qi-guozheng

注册时间:2019-05-23
最后登录:2019-07-31
在线时长:1小时2分
  • 粉丝0
  • 金钱5
  • 威望0
  • 积分15

热门问题