PatternFactory.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. /**
  3. * Zend Framework (http://framework.zend.com/)
  4. *
  5. * @link http://github.com/zendframework/zf2 for the canonical source repository
  6. * @copyright Copyright (c) 2005-2016 Zend Technologies USA Inc. (http://www.zend.com)
  7. * @license http://framework.zend.com/license/new-bsd New BSD License
  8. */
  9. namespace Zend\Cache;
  10. use Traversable;
  11. use Zend\Stdlib\ArrayUtils;
  12. use Zend\ServiceManager\ServiceManager;
  13. abstract class PatternFactory
  14. {
  15. /**
  16. * The pattern manager
  17. *
  18. * @var null|PatternPluginManager
  19. */
  20. protected static $plugins = null;
  21. /**
  22. * Instantiate a cache pattern
  23. *
  24. * @param string|Pattern\PatternInterface $patternName
  25. * @param array|Traversable|Pattern\PatternOptions $options
  26. * @return Pattern\PatternInterface
  27. * @throws Exception\InvalidArgumentException
  28. */
  29. public static function factory($patternName, $options = [])
  30. {
  31. if ($options instanceof Pattern\PatternOptions) {
  32. $options = $options->toArray();
  33. }
  34. if ($options instanceof Traversable) {
  35. $options = ArrayUtils::iteratorToArray($options);
  36. }
  37. if (! is_array($options)) {
  38. throw new Exception\InvalidArgumentException(sprintf(
  39. '%s expects an array, Traversable object, or %s\Pattern\PatternOptions object; received "%s"',
  40. __METHOD__,
  41. __NAMESPACE__,
  42. (is_object($options) ? get_class($options) : gettype($options))
  43. ));
  44. }
  45. if ($patternName instanceof Pattern\PatternInterface) {
  46. $patternName->setOptions(new Pattern\PatternOptions($options));
  47. return $patternName;
  48. }
  49. return static::getPluginManager()->get($patternName, $options);
  50. }
  51. /**
  52. * Get the pattern plugin manager
  53. *
  54. * @return PatternPluginManager
  55. */
  56. public static function getPluginManager()
  57. {
  58. if (static::$plugins === null) {
  59. static::$plugins = new PatternPluginManager(new ServiceManager);
  60. }
  61. return static::$plugins;
  62. }
  63. /**
  64. * Set the pattern plugin manager
  65. *
  66. * @param PatternPluginManager $plugins
  67. * @return void
  68. */
  69. public static function setPluginManager(PatternPluginManager $plugins)
  70. {
  71. static::$plugins = $plugins;
  72. }
  73. /**
  74. * Reset pattern plugin manager to default
  75. *
  76. * @return void
  77. */
  78. public static function resetPluginManager()
  79. {
  80. static::$plugins = null;
  81. }
  82. }