getCommand()) { return $prev; } // If the exception is a RequestException, get the Request and Response. $request = $response = null; if ($prev instanceof RequestException) { $request = $prev->getRequest(); $response = $prev->getResponse(); } // Throw a more specific exception for 4XX or 5XX responses. $class = self::class; $statusCode = $response ? $response->getStatusCode() : 0; if ($statusCode >= 400 && $statusCode < 500) { $class = CommandClientException::class; } elseif ($statusCode >= 500 && $statusCode < 600) { $class = CommandServerException::class; } // Prepare the message. $message = 'There was an error executing the ' . $command->getName() . ' command: ' . $prev->getMessage(); // Create the exception. return new $class($message, $command, $prev, $request, $response); } /** * @param string $message Exception message * @param CommandInterface $command * @param \Exception $previous Previous exception (if any) * @param RequestInterface $request * @param ResponseInterface $response */ public function __construct( $message, CommandInterface $command, \Exception $previous = null, RequestInterface $request = null, ResponseInterface $response = null ) { $this->command = $command; $this->request = $request; $this->response = $response; parent::__construct($message, 0, $previous); } /** * Gets the command that failed. * * @return CommandInterface */ public function getCommand() { return $this->command; } /** * Gets the request that caused the exception * * @return RequestInterface|null */ public function getRequest() { return $this->request; } /** * Gets the associated response * * @return ResponseInterface|null */ public function getResponse() { return $this->response; } }