houqin2869 2019-05-23 02:11
浏览 194

PHP mvc结构中如何处理异常?

在使用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;
        }
    }
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 #MATLAB仿真#车辆换道路径规划
    • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
    • ¥15 数据可视化Python
    • ¥15 要给毕业设计添加扫码登录的功能!!有偿
    • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
    • ¥15 微信公众号自制会员卡没有收款渠道啊
    • ¥100 Jenkins自动化部署—悬赏100元
    • ¥15 关于#python#的问题:求帮写python代码
    • ¥20 MATLAB画图图形出现上下震荡的线条
    • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘