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 如何在scanpy上做差异基因和通路富集?
    • ¥20 关于#硬件工程#的问题,请各位专家解答!
    • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
    • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
    • ¥30 截图中的mathematics程序转换成matlab
    • ¥15 动力学代码报错,维度不匹配
    • ¥15 Power query添加列问题
    • ¥50 Kubernetes&Fission&Eleasticsearch
    • ¥15 報錯:Person is not mapped,如何解決?
    • ¥15 c++头文件不能识别CDialog