Filesystem.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <?php
  2. /**
  3. * Magento filesystem facade
  4. *
  5. * Copyright © Magento, Inc. All rights reserved.
  6. * See COPYING.txt for license details.
  7. */
  8. namespace Magento\Framework;
  9. use Magento\Framework\Filesystem\DriverPool;
  10. /**
  11. * @api
  12. * @since 100.0.2
  13. */
  14. class Filesystem
  15. {
  16. /**
  17. * @var \Magento\Framework\Filesystem\DirectoryList
  18. */
  19. protected $directoryList;
  20. /**
  21. * @var \Magento\Framework\Filesystem\Directory\ReadFactory
  22. */
  23. protected $readFactory;
  24. /**
  25. * @var \Magento\Framework\Filesystem\Directory\WriteFactory
  26. */
  27. protected $writeFactory;
  28. /**
  29. * @var \Magento\Framework\Filesystem\Directory\ReadInterface[]
  30. */
  31. protected $readInstances = [];
  32. /**
  33. * @var \Magento\Framework\Filesystem\Directory\WriteInterface[]
  34. */
  35. protected $writeInstances = [];
  36. /**
  37. * @param Filesystem\DirectoryList $directoryList
  38. * @param Filesystem\Directory\ReadFactory $readFactory
  39. * @param Filesystem\Directory\WriteFactory $writeFactory
  40. */
  41. public function __construct(
  42. \Magento\Framework\Filesystem\DirectoryList $directoryList,
  43. \Magento\Framework\Filesystem\Directory\ReadFactory $readFactory,
  44. \Magento\Framework\Filesystem\Directory\WriteFactory $writeFactory
  45. ) {
  46. $this->directoryList = $directoryList;
  47. $this->readFactory = $readFactory;
  48. $this->writeFactory = $writeFactory;
  49. }
  50. /**
  51. * Create an instance of directory with read permissions
  52. *
  53. * @param string $directoryCode
  54. * @param string $driverCode
  55. * @return \Magento\Framework\Filesystem\Directory\ReadInterface
  56. */
  57. public function getDirectoryRead($directoryCode, $driverCode = DriverPool::FILE)
  58. {
  59. $code = $directoryCode . '_' . $driverCode;
  60. if (!array_key_exists($code, $this->readInstances)) {
  61. $this->readInstances[$code] = $this->readFactory->create($this->getDirPath($directoryCode), $driverCode);
  62. }
  63. return $this->readInstances[$code];
  64. }
  65. /**
  66. * Create an instance of directory with read permissions by path.
  67. *
  68. * @param string $path
  69. * @param string $driverCode
  70. *
  71. * @return \Magento\Framework\Filesystem\Directory\ReadInterface
  72. *
  73. * @since 102.0.0
  74. */
  75. public function getDirectoryReadByPath($path, $driverCode = DriverPool::FILE)
  76. {
  77. return $this->readFactory->create($path, $driverCode);
  78. }
  79. /**
  80. * Create an instance of directory with write permissions
  81. *
  82. * @param string $directoryCode
  83. * @param string $driverCode
  84. * @return \Magento\Framework\Filesystem\Directory\WriteInterface
  85. * @throws \Magento\Framework\Exception\FileSystemException
  86. */
  87. public function getDirectoryWrite($directoryCode, $driverCode = DriverPool::FILE)
  88. {
  89. $code = $directoryCode . '_' . $driverCode;
  90. if (!array_key_exists($code, $this->writeInstances)) {
  91. $this->writeInstances[$code] = $this->writeFactory->create($this->getDirPath($directoryCode), $driverCode);
  92. }
  93. return $this->writeInstances[$code];
  94. }
  95. /**
  96. * Gets configuration of a directory
  97. *
  98. * @param string $code
  99. * @return string
  100. */
  101. protected function getDirPath($code)
  102. {
  103. return $this->directoryList->getPath($code);
  104. }
  105. /**
  106. * Retrieve uri for given code
  107. *
  108. * @param string $code
  109. * @return string
  110. */
  111. public function getUri($code)
  112. {
  113. return $this->directoryList->getUrlPath($code);
  114. }
  115. }