'ErrorCommon', ErrorCode::INVALID_REQUEST => 'ErrorBadRequest', ErrorCode::INVALID_CREDENTIALS => 'ErrorInvalidCredentials', ErrorCode::FORBIDDEN => 'ErrorForbidden', ErrorCode::NOT_FOUND => 'ErrorNotFound', ErrorCode::GONE => 'ErrorGone', ErrorCode::TOO_MANY_REQUESTS => 'ErrorTooManyRequests', ErrorCode::INTERNAL_SERVER_ERROR => 'ErrorInternalServerError', ErrorCode::REFUSAL => 'ErrorRuleViolation', ErrorCode::UNKNOWN => 'ErrorUnknown', ]; /** * Фабричный метод создания объекта ошибки по типу. * * @param string|null $code Код ошибки * * @return AbstractError */ public function factory(?string $code): AbstractError { if (!array_key_exists($code, $this->typeClassMap)) { $code = ErrorCode::UNKNOWN; } $className = __NAMESPACE__ . '\\' . $this->typeClassMap[$code]; return new $className(); } /** * Фабричный метод создания объекта ошибки из массива. * * @param array $data Массив данных ошибки * @param null|string $code Код ошибки */ public function factoryFromArray(array $data, ?string $code = null): AbstractError { if (null === $code) { if (array_key_exists('code', $data)) { $code = $data['code']; unset($data['code']); } else { $code = ErrorCode::UNKNOWN; } } $errorData = $this->factory($code); $errorData->fromArray($data); return $errorData; } }