MVC 结构中如何处理异常 [ 2.0 版本 ]
在使用 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; //抛出异常
}
}
`
共 2 个回答
-
可以去看看我关于错误处理的文章:
Yii2整站的统一错误处理控制器设计共 1 条回复qi-guozheng 回复于 2019-05-23 09:09 回复谢回复,看了您的文章,应该是展现层的错误展示,我们项目是前后端分离的设计,我纠结的是逻辑层和展现层的异常处理逻辑
-
return19931112 回答于 2019-05-23 11:19 举报
第一种和第二种都可以,只要制定好开发规范就行,第三种不建议使用
qi-guozheng
注册时间:2019-05-23
最后登录:2019-07-31
在线时长:1小时2分
最后登录:2019-07-31
在线时长:1小时2分
- 粉丝0
- 金钱5
- 威望0
- 积分15