Example #1
0
 /**
  * Emits an error event for a request and accounts for the propagation
  * of an error event being stopped to prevent the exception from being
  * thrown.
  *
  * @param puzzle_adapter_TransactionInterface $transaction
  * @param Exception           $e
  * @param array                $stats
  *
  * @throws puzzle_exception_RequestException
  */
 public static function emitError(puzzle_adapter_TransactionInterface $transaction, Exception $e, array $stats = array())
 {
     $request = $transaction->getRequest();
     // Convert non-request exception to a wrapped exception
     if (!$e instanceof puzzle_exception_RequestException) {
         $e = new puzzle_exception_RequestException($e->getMessage(), $request, null, $e);
     }
     // Mark the exception as having been emitted for an error event. This
     // works in tandem with the emitBefore method to prevent the error
     // event from being triggered twice for the same exception.
     $e->emittedError(true);
     // Dispatch an event and allow interception
     if (!$request->getEmitter()->emit('error', new puzzle_event_ErrorEvent($transaction, $e, $stats))->isPropagationStopped()) {
         throw $e;
     }
 }