2017-02-17 16:02:18 4455次浏览 5条回答 0 悬赏 50 金钱

rest的active controller里面可以指定modelClass以后,就能完成一个RESTful的api。
但是这样的话,在不重写方法的情况下就没办法捕捉异常了,比如数据库插入数据错误,抛出yii\db\IntegrityException的时候。
有没有什么办法能够捕捉到这个异常,主要是想要知道异常的内容,对常见的异常提供一个程序相关的错误描述。
比如,MySQL 1064错误,可以知道插入了不能重复的值,这样返回一个自定义的错误代码,让前端知道是因为数据重复了,好给出相应的提示。

  • 回答于 2017-02-18 22:40 举报

    启用log组件,然后让异常都记录到log中吧

    1 条回复
    回复于 2017-02-20 12:04 回复

    记录是一方面,但是想要catch这个异常,然后调整输出

  • 回答于 2017-02-20 15:28 举报

    可以在beforeAction里面先检查好数据,有问题直接返回吧

    1 条回复
    回复于 2017-02-22 16:14 回复

    但是有些数据是在后面才得到的,不是输入的数据就有。

  • 回答于 2017-02-20 17:18 举报

    这个求大神指导,我也想知道

  • 回答于 2017-02-21 17:34 举报
    try {  
        //code  
    } catch (\Exception $e) {  
        echo Json::encode($e->getMessage());  
    }
    

    这样不行么?

    5 条回复
    回复于 2017-02-22 16:06 回复

    关键是这段代码放在controller的什么地方啊

    回复于 2017-02-22 22:08 回复

    放在action里面就行

    回复于 2017-02-23 10:48 回复

    但是RESTful的controller最简单的是只要设置一个modelClass了,而且拥有多个action,如果每一个action都去多加这个,那就很麻烦了,而且这还只是一个controller,如果按照一个model对应一个controller,这工作量就很大了。所以我问的是有没有什么其他办法能够直接统一处理

    回复于 2017-02-23 14:33 回复
    回复于 2017-02-24 12:24 回复

    这种我已经考虑过了,在非debug模式下,到达那一步的时候yii已经把数据库的错误信息丢掉了,并不能获取到我想要的信息

  • 回答于 2017-03-06 14:15 举报

    $exception = \Yii::$app->errorHandler->exception;

        if ($exception instanceof NotFoundHttpException) {
            return $this->render('404');
        } elseif ($exception instanceof BadRequestHttpException) {
            return $this->render('error', ['exception' => $exception->getMessage()]);
        } elseif ($exception instanceof Exception) {
            return $this->render('error', ['exception' => $exception->getMessage()]);
        } else {
            return $this->render('error', ['exception' => '请求异常']);
        }
    

    具体的异常类你自己判断

您需要登录后才可以回答。登录 | 立即注册
orzorc
见习主管

orzorc

注册时间:2016-12-23
最后登录:2017-02-24
在线时长:1小时24分
  • 粉丝0
  • 金钱265
  • 威望20
  • 积分475

热门问题