Php 如何将一个命名空间中的异常转换为另一个命名空间?

Php 如何将一个命名空间中的异常转换为另一个命名空间?,php,Php,我正在开发一个由controllerapi.php处理的API 基本上,我在不同的名称空间中有模型,我在该名称空间中抛出异常 如何将这些异常转换为api异常 因此,在api.php中,我捕获了异常MyapiException 在名称空间Events中,我有一个名为EventExceptions的所有者异常类 php调用事件命名空间中的模型。这些模型抛出事件异常。我想将这些事件异常转换为MyApiException(如将代码转换为MyApiException错误代码等) 我在哪里做?在api.ph

我正在开发一个由controllerapi.php处理的API

基本上,我在不同的名称空间中有模型,我在该名称空间中抛出异常

如何将这些异常转换为api异常

因此,在api.php中,我捕获了异常MyapiException

在名称空间Events中,我有一个名为EventExceptions的所有者异常类

php调用事件命名空间中的模型。这些模型抛出事件异常。我想将这些事件异常转换为MyApiException(如将代码转换为MyApiException错误代码等)


我在哪里做?在api.php中?或者在EventException类中?

您要么捕获确切的异常,要么捕获一个父异常,然后抛出另一个异常。让我举例说明

namespace \MyApp\API;
class APIException extends \RuntimeException {}

namespace \MyApp\Event;
class EventException extends \RuntimeException {}
现在我们想在API中捕获一个事件异常,我们只想捕获那些异常

try {
    $concreteEventInstance->fn();
}
catch (\MyApp\Event\EventException $e) {

}
到目前为止没有问题,您知道这一部分,但现在我们想将此异常转换为API异常(无论出于何种原因),那么,我们只需在前一个异常的基础上抛出一个新异常

try {
    $concreteEventInstance->fn();
}
catch (\MyApp\Event\EventException $e) {
    throw new \MyApp\API\APIException(
        "My Stackoverflow exception example",
        42,
        $e // <-- See how I attach it as previous exception
    );
}
试试看{
$concreteEventInstance->fn();
}
catch(\MyApp\Event\EventException$e){
抛出new\MyApp\API\APIException(
“我的Stackoverflow异常示例”,
42,

$e//如何将EventException类的错误代码转换为ApiException类的错误代码(它们有不同的错误代码)?我正在考虑使用一个静态变量映射两个错误代码,并使用一个函数将EventException错误代码映射到ApiException错误代码。您可以定义一个包含各种错误代码的类,当然,当您使用
$e->getCode()
捕获异常时,您可以访问错误代码。