Open Journal Systems  3.3.0
ErrorResponsePlugin.php
1 <?php
2 
4 
11 
16 {
17  public static function getSubscribedEvents()
18  {
19  return array('command.before_send' => array('onCommandBeforeSend', -1));
20  }
21 
27  public function onCommandBeforeSend(Event $event)
28  {
29  $command = $event['command'];
30  if ($operation = $command->getOperation()) {
31  if ($operation->getErrorResponses()) {
32  $request = $command->getRequest();
33  $request->getEventDispatcher()
34  ->addListener('request.complete', $this->getErrorClosure($request, $command, $operation));
35  }
36  }
37  }
38 
47  protected function getErrorClosure(RequestInterface $request, CommandInterface $command, Operation $operation)
48  {
49  return function (Event $event) use ($request, $command, $operation) {
50  $response = $event['response'];
51  foreach ($operation->getErrorResponses() as $error) {
52  if (!isset($error['class'])) {
53  continue;
54  }
55  if (isset($error['code']) && $response->getStatusCode() != $error['code']) {
56  continue;
57  }
58  if (isset($error['reason']) && $response->getReasonPhrase() != $error['reason']) {
59  continue;
60  }
61  $className = $error['class'];
62  $errorClassInterface = __NAMESPACE__ . '\\ErrorResponseExceptionInterface';
63  if (!class_exists($className)) {
64  throw new ErrorResponseException("{$className} does not exist");
65  } elseif (!(in_array($errorClassInterface, class_implements($className)))) {
66  throw new ErrorResponseException("{$className} must implement {$errorClassInterface}");
67  }
68  throw $className::fromCommand($command, $response);
69  }
70  };
71  }
72 }
Guzzle\Http\Message\RequestInterface
Definition: lib/vendor/guzzle/guzzle/src/Guzzle/Http/Message/RequestInterface.php:16
Guzzle\Service\Description\Operation
Definition: Operation.php:10
Symfony\Component\EventDispatcher\EventSubscriberInterface
Definition: lib/vendor/symfony/event-dispatcher/EventSubscriberInterface.php:25
Guzzle\Plugin\ErrorResponse
Definition: ErrorResponseExceptionInterface.php:3
Guzzle\Plugin\ErrorResponse\Exception\ErrorResponseException
Definition: ErrorResponseException.php:7
Guzzle\Service\Command\CommandInterface
Definition: CommandInterface.php:17
Guzzle\Plugin\ErrorResponse\ErrorResponsePlugin\getSubscribedEvents
static getSubscribedEvents()
Definition: ErrorResponsePlugin.php:17
Guzzle\Plugin\ErrorResponse\ErrorResponsePlugin\onCommandBeforeSend
onCommandBeforeSend(Event $event)
Definition: ErrorResponsePlugin.php:27
Guzzle\Common\Event
Definition: lib/vendor/guzzle/guzzle/src/Guzzle/Common/Event.php:10
Guzzle\Service\Description\Operation\getErrorResponses
getErrorResponses()
Definition: Operation.php:500
Guzzle\Plugin\ErrorResponse\ErrorResponsePlugin
Definition: ErrorResponsePlugin.php:15
Guzzle\Plugin\ErrorResponse\ErrorResponsePlugin\getErrorClosure
getErrorClosure(RequestInterface $request, CommandInterface $command, Operation $operation)
Definition: ErrorResponsePlugin.php:47