Completed
Push — master ( 15b552...3b786e )
by Razon
01:41
created

ErrorHandler::convertExceptionToArray()   B

Complexity

Conditions 7
Paths 12

Size

Total Lines 23
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 12
CRAP Score 7.0222

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 7
eloc 13
c 2
b 0
f 0
nc 12
nop 1
dl 0
loc 23
ccs 12
cts 13
cp 0.9231
crap 7.0222
rs 8.8333
1
<?php
2
namespace RazonYang\Yii2\JSend;
3
4
use RazonYang\JSend\Exception;
5
use RazonYang\JSend\Status;
6
use Yii;
7
use yii\base\UserException;
8
use yii\web\ErrorHandler as BaseErrorHandler;
9
use yii\web\HttpException;
10
11
class ErrorHandler extends BaseErrorHandler
12
{
13 4
    protected function convertExceptionToArray($exception)
14
    {
15 4
        if (!YII_DEBUG && !$exception instanceof UserException && !$exception instanceof HttpException) {
16
            $exception = new Exception(Yii::t('yii', 'An internal server error occurred.'), 500);
17
        }
18
19
        $payload = [
20 4
            'status' => Status::ERROR,
21 4
            'message' => $exception->getMessage(),
22 4
            'code' => $exception->getCode(),
23
        ];
24 4
        if ($exception instanceof Exception) {
25 1
            $payload['data'] = $exception->getData();
26
        }
27
28 4
        if (YII_DEBUG) {
29 4
            $payload['debug']['traces'] = explode("\n", $exception->getTraceAsString());
30 4
            if (($prev = $exception->getPrevious()) !== null) {
31 1
                $payload['debug']['previous'] = $this->convertExceptionToArray($prev);
32
            }
33
        }
34
35 4
        return $payload;
36
    }
37
}
38