Функция не возвращает ничего при использовании переключателя - PullRequest
0 голосов
/ 05 июля 2018

Если я возвращаю условие array до SWITCH, оно работает нормально, но если попытаться вернуть что-то после условия SWITCH (даже в жестко заданном массиве), оно ничего не возвращает. Кроме того, он не входит ни в CASE, ни даже DEFAULT. Даже печать или эхо не работает.

Моя $e->getAwsErrorCode() функция возвращает InvalidSignatureException, но не входит в соответствующий случай переключения.

Я проверил журнал ошибок и там ничего нет, на странице нет ошибок или предупреждений.

private function rekognition_error_catch($e)
    {
        $arr_error = array();
        /*return [
            'error_code' => 34,
            'error_message' => 'Error'
        ];*/
        switch ($e->getAwsErrorCode()) {
            case 'InvalidParameterException':
                $arr_error['error_code'] = 71;
                $arr_error['error_message'] = $e->getAwsErrorMessage();
                break;
            case 'InvalidS3ObjectException':
                $arr_error['error_code'] = 72;
                $arr_error['error_message'] = $e->getAwsErrorMessage();
                break;
            case 'ImageTooLargeException':
                $arr_error['error_code'] = 73;
                $arr_error['error_message'] = $e->getAwsErrorMessage();
                break;
            case 'AccessDeniedException':
                $arr_error['error_code'] = 74;
                $arr_error['error_message'] = $e->getAwsErrorMessage();
                break;
            case 'InternalServerError':
                $arr_error['error_code'] = 75;
                $arr_error['error_message'] = $e->getAwsErrorMessage();
                break;
            case 'ThrottlingException':
                $arr_error['error_code'] = 76;
                $arr_error['error_message'] = $e->getAwsErrorMessage();
                break;
            case 'ProvisionedThroughputExceededException':
                $arr_error['error_code'] = 77;
                $arr_error['error_message'] = $e->getAwsErrorMessage();
                break;
            case 'InvalidImageFormatException':
                $arr_error['error_code'] = 78;
                $arr_error['error_message'] = $e->getAwsErrorMessage();
                break;
            case 'InvalidSignatureException': 
                $arr_error['error_code'] = 79;
                $arr_error['error_message'] = $e->getAwsErrorMessage();
                echo '1';
                print_r($arr_error);
                break;
            default:
                //throw new Exception($e->getAwsErrorMessage(),80);
                $arr_error['error_code'] = 80;
                $arr_error['error_message'] = $e->getAwsErrorMessage();
        }
        echo '2';
        print_r($arr_error);
        return [
          'error_code' => 34,
          'error_message' => 'Error'
        ];
    }

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

В ваших случаях установлено $arr_array, но вы никогда его не возвращаете, вы всегда возвращаете значение по умолчанию [ 'error_code' => 34, 'error_message' => 'Error' ], поэтому вам нужно проверить, установлены ли значения в этом массиве, поэтому;

if (!empty($arr_error['error_code']))
{
    return $arr_error;
}
return [
  'error_code' => 34,
  'error_message' => 'Error'
];

Выше проверяется, установлен ли код ошибки в $arr_error и будет ли он использоваться, в противном случае возвращается ошибка по умолчанию 34

Точно так же, как примечание, вы называете $e->getAwsErrorMessage() ужасным лотом, его хранение немного упростит, например,

$arr_error = array();
$err_message = $e->getAwsErrorCode();
switch ($err_message) {
    case 'InvalidParameterException':
        $arr_error['error_code'] = 71;
        $arr_error['error_message'] = $err_message;
        break;
    /* Your other code, just using $err_message instead of $e->getAwsErrorCode()
    This will save some overhead from the function calls */
}
0 голосов
/ 05 июля 2018

Если ваш регистр переключателя не возвращает никакого значения в то время, вы должны поместить регистр по умолчанию в ваш регистр переключателя .. default - это случай, который выполняется, когда любой другой случай не будет совпадать ..

...