Если я верну 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'
];
}
Ваши дела установлены $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 */
}
Если ваш регистр переключателя не возвращает никакого значения в то время, вы должны поместить регистр по умолчанию в ваш регистр переключателя .. default — это случай, который выполняется, когда любой другой случай не будет совпадать.