Alcaeus\MongoDbAdapter\ExceptionConverter::toLegacy PHP Method

toLegacy() public static method

public static toLegacy ( MongoDB\Driver\Exception\Exception $e, string $fallbackClass = 'MongoException' ) : MongoException
$e MongoDB\Driver\Exception\Exception
$fallbackClass string
return MongoException
    public static function toLegacy(Exception\Exception $e, $fallbackClass = 'MongoException')
    {
        $message = $e->getMessage();
        $code = $e->getCode();
        switch (get_class($e)) {
            case Exception\AuthenticationException::class:
            case Exception\ConnectionException::class:
            case Exception\ConnectionTimeoutException::class:
            case Exception\SSLConnectionException::class:
                $class = 'MongoConnectionException';
                break;
            case Exception\BulkWriteException::class:
            case Exception\WriteException::class:
                $writeResult = $e->getWriteResult();
                if ($writeResult) {
                    $writeError = $writeResult->getWriteErrors()[0];
                    $message = $writeError->getMessage();
                    $code = $writeError->getCode();
                }
                switch ($code) {
                    // see https://github.com/mongodb/mongo-php-driver-legacy/blob/ad3ed45739e9702ae48e53ddfadc482d9c4c7e1c/cursor_shared.c#L540
                    case 11000:
                    case 11001:
                    case 12582:
                        $class = 'MongoDuplicateKeyException';
                        break;
                    default:
                        $class = 'MongoCursorException';
                }
                break;
            case Exception\ExecutionTimeoutException::class:
                $class = 'MongoExecutionTimeoutException';
                break;
            default:
                $class = $fallbackClass;
        }
        if (strpos($message, 'No suitable servers found') !== false) {
            return new \MongoConnectionException($message, $code, $e);
        }
        if ($message === "cannot use 'w' > 1 when a host is not replicated") {
            return new \MongoWriteConcernException($message, $code, $e);
        }
        return new $class($message, $code, $e);
    }

Usage Example

 /**
  * @dataProvider exceptionProvider
  */
 public function testConvertException($e, $expectedClass)
 {
     $exception = ExceptionConverter::toLegacy($e);
     $this->assertInstanceOf($expectedClass, $exception);
     $this->assertSame($e->getMessage(), $exception->getMessage());
     $this->assertSame($e->getCode(), $exception->getCode());
     $this->assertSame($e, $exception->getPrevious());
 }
All Usage Examples Of Alcaeus\MongoDbAdapter\ExceptionConverter::toLegacy
ExceptionConverter