You are here

SerializableStrategy.php in Zircon Profile 8.0

File

vendor/zendframework/zend-hydrator/src/Strategy/SerializableStrategy.php
View source
<?php

/**
 * Zend Framework (http://framework.zend.com/)
 *
 * @link      http://github.com/zendframework/zf2 for the canonical source repository
 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
 * @license   http://framework.zend.com/license/new-bsd New BSD License
 */
namespace Zend\Hydrator\Strategy;

use Zend\Hydrator\Exception\InvalidArgumentException;
use Zend\Serializer\Adapter\AdapterInterface as SerializerAdapter;
use Zend\Serializer\Serializer as SerializerFactory;
class SerializableStrategy implements StrategyInterface {

  /**
   * @var string|SerializerAdapter
   */
  protected $serializer;

  /**
   * @var array
   */
  protected $serializerOptions = [];

  /**
   *
   * @param mixed $serializer string or SerializerAdapter
   * @param mixed $serializerOptions
   */
  public function __construct($serializer, $serializerOptions = null) {
    $this
      ->setSerializer($serializer);
    if ($serializerOptions) {
      $this
        ->setSerializerOptions($serializerOptions);
    }
  }

  /**
   * Serialize the given value so that it can be extracted by the hydrator.
   *
   * @param mixed $value The original value.
   * @return mixed Returns the value that should be extracted.
   */
  public function extract($value) {
    $serializer = $this
      ->getSerializer();
    return $serializer
      ->serialize($value);
  }

  /**
   * Unserialize the given value so that it can be hydrated by the hydrator.
   *
   * @param mixed $value The original value.
   * @return mixed Returns the value that should be hydrated.
   */
  public function hydrate($value) {
    $serializer = $this
      ->getSerializer();
    return $serializer
      ->unserialize($value);
  }

  /**
   * Set serializer
   *
   * @param  string|SerializerAdapter $serializer
   * @return SerializableStrategy
   */
  public function setSerializer($serializer) {
    if (!is_string($serializer) && !$serializer instanceof SerializerAdapter) {
      throw new InvalidArgumentException(sprintf('%s expects either a string serializer name or Zend\\Serializer\\Adapter\\AdapterInterface instance; ' . 'received "%s"', __METHOD__, is_object($serializer) ? get_class($serializer) : gettype($serializer)));
    }
    $this->serializer = $serializer;
    return $this;
  }

  /**
   * Get serializer
   *
   * @return SerializerAdapter
   */
  public function getSerializer() {
    if (is_string($this->serializer)) {
      $options = $this
        ->getSerializerOptions();
      $this
        ->setSerializer(SerializerFactory::factory($this->serializer, $options));
    }
    elseif (null === $this->serializer) {
      $this
        ->setSerializer(SerializerFactory::getDefaultAdapter());
    }
    return $this->serializer;
  }

  /**
   * Set configuration options for instantiating a serializer adapter
   *
   * @param  mixed $serializerOptions
   * @return SerializableStrategy
   */
  public function setSerializerOptions($serializerOptions) {
    $this->serializerOptions = $serializerOptions;
    return $this;
  }

  /**
   * Get configuration options for instantiating a serializer adapter
   *
   * @return mixed
   */
  public function getSerializerOptions() {
    return $this->serializerOptions;
  }

}

Classes