You are here

class ChainDecoder in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/symfony/serializer/Encoder/ChainDecoder.php \Symfony\Component\Serializer\Encoder\ChainDecoder

Decoder delegating the decoding to a chain of decoders.

@author Jordi Boggiano <j.boggiano@seld.be> @author Johannes M. Schmitt <schmittjoh@gmail.com> @author Lukas Kahwe Smith <smith@pooteeweet.org>

Hierarchy

Expanded class hierarchy of ChainDecoder

1 file declares its use of ChainDecoder
Serializer.php in vendor/symfony/serializer/Serializer.php

File

vendor/symfony/serializer/Encoder/ChainDecoder.php, line 23

Namespace

Symfony\Component\Serializer\Encoder
View source
class ChainDecoder implements DecoderInterface {
  protected $decoders = array();
  protected $decoderByFormat = array();
  public function __construct(array $decoders = array()) {
    $this->decoders = $decoders;
  }

  /**
   * {@inheritdoc}
   */
  public final function decode($data, $format, array $context = array()) {
    return $this
      ->getDecoder($format)
      ->decode($data, $format, $context);
  }

  /**
   * {@inheritdoc}
   */
  public function supportsDecoding($format) {
    try {
      $this
        ->getDecoder($format);
    } catch (RuntimeException $e) {
      return false;
    }
    return true;
  }

  /**
   * Gets the decoder supporting the format.
   *
   * @param string $format
   *
   * @return DecoderInterface
   *
   * @throws RuntimeException if no decoder is found
   */
  private function getDecoder($format) {
    if (isset($this->decoderByFormat[$format]) && isset($this->decoders[$this->decoderByFormat[$format]])) {
      return $this->decoders[$this->decoderByFormat[$format]];
    }
    foreach ($this->decoders as $i => $decoder) {
      if ($decoder
        ->supportsDecoding($format)) {
        $this->decoderByFormat[$format] = $i;
        return $decoder;
      }
    }
    throw new RuntimeException(sprintf('No decoder found for format "%s".', $format));
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ChainDecoder::$decoderByFormat protected property
ChainDecoder::$decoders protected property
ChainDecoder::decode final public function Decodes a string into PHP data. Overrides DecoderInterface::decode
ChainDecoder::getDecoder private function Gets the decoder supporting the format.
ChainDecoder::supportsDecoding public function Checks whether the deserializer can decode from given format. Overrides DecoderInterface::supportsDecoding
ChainDecoder::__construct public function