コード例 #1
0
 /**
  * @param RequestInterface $request   Request that received an error
  * @param CommandInterface $command   Command that created the request
  * @param Operation        $operation Operation that defines the request and errors
  *
  * @return \Closure Returns a closure
  * @throws ErrorResponseException
  */
 protected function getErrorClosure(RequestInterface $request, CommandInterface $command, Operation $operation)
 {
     return function (Event $event) use($request, $command, $operation) {
         $response = $event['response'];
         foreach ($operation->getErrorResponses() as $error) {
             if (!isset($error['class'])) {
                 continue;
             }
             if (isset($error['code']) && $response->getStatusCode() != $error['code']) {
                 continue;
             }
             if (isset($error['reason']) && $response->getReasonPhrase() != $error['reason']) {
                 continue;
             }
             $className = $error['class'];
             $errorClassInterface = __NAMESPACE__ . '\\ErrorResponseExceptionInterface';
             if (!class_exists($className)) {
                 throw new ErrorResponseException("{$className} does not exist");
             } elseif (!is_subclass_of($className, $errorClassInterface)) {
                 throw new ErrorResponseException("{$className} must implement {$errorClassInterface}");
             }
             throw $className::fromCommand($command, $response);
         }
     };
 }