如何在Yii2 RESTful API中覆盖actionCreate时捕获数据库异常?

Fla*_*Moe 3 rest yii2 yii2-advanced-app

我正在使用Yii2 RESTful API实现.这是一个好的开始:http://budiirawan.com/setup-restful-api-yii2/

我用自己的动作覆盖了CREATE方法:

    public function actionCreate(){
        $params = $_REQUEST;    
        if (!empty($params["name"]) && !empty($params["code"])) {
            $model = new $this->modelClass;
            foreach ($params as $key => $value) {
                if (!$model->hasAttribute($key)) {
                    throw new \yii\web\HttpException(400, 'Invalid attribute:' . $key);
                }
            }

            $model->attributes=$params;
            try {
                $model->save();
            } catch (CDbException $ex) {
                // ... NEVER REACH THIS POINT :-(
                throw new \yii\web\HttpException(405, 'Error saving model');
            } catch (Exception $ex) {
                // ... NEVER REACH THIS POINT :-(
                throw new \yii\web\HttpException(405, 'Error saving model');
            }

        } else {
            throw new \yii\web\HttpException(400, 'No data input');
        }

    }
Run Code Online (Sandbox Code Playgroud)

问题是当模型试图保存时,在我的情况下,我的数据库中存在"完整性约束违规".

我想要的是处理该错误并运行我的"catch",但我不知道如何"捕获"该错误,因为Yii"控制"该错误并抛出500错误作为响应.

如何处理"模型保存"错误?

Ton*_*ony 6

Yii2没有CDbException.要捕获所有与db相关的异常,catch(\yii\db\Exception $e){...}并捕获任何其他异常catch(\Exception $e){...}

您正在捕获两个例外,但它们只做同样的事情

catch(\Exception $e){ 
    throw new \yii\web\HttpException(405, 'Error saving model'); 
}
Run Code Online (Sandbox Code Playgroud)

\Exception 是所有yii2异常继承的基本php异常类