Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Io.php
Go to the documentation of this file.
1 <?php
7 
9 
13 class Io
14 {
19  const DEFAULT_DIRECTORY = 'generated/code';
20 
26  private $_generationDirectory;
27 
31  private $filesystemDriver;
32 
37  public function __construct(
38  \Magento\Framework\Filesystem\Driver\File $filesystemDriver,
39  $generationDirectory = null
40  ) {
41  $this->filesystemDriver = $filesystemDriver;
42  $this->initGeneratorDirectory($generationDirectory);
43  }
44 
51  protected function initGeneratorDirectory($directory = null)
52  {
53  if ($directory) {
54  $this->_generationDirectory = rtrim($directory, '/') . '/';
55  } else {
56  $this->_generationDirectory = realpath(__DIR__ . '/../../../../') . '/' . self::DEFAULT_DIRECTORY . '/';
57  }
58  }
59 
64  public function getResultFileDirectory($className)
65  {
66  $fileName = $this->generateResultFileName($className);
67  $pathParts = explode('/', $fileName);
68  unset($pathParts[count($pathParts) - 1]);
69 
70  return implode('/', $pathParts) . '/';
71  }
72 
77  public function generateResultFileName($className)
78  {
79  return $this->_generationDirectory . ltrim(str_replace(['\\', '_'], '/', $className), '/') . '.php';
80  }
81 
88  public function writeResultFile($fileName, $content)
89  {
96  $content = "<?php\n" . $content;
97  $tmpFile = $fileName . "." . getmypid();
98  $this->filesystemDriver->filePutContents($tmpFile, $content);
99 
100  try {
101  $success = $this->filesystemDriver->rename($tmpFile, $fileName);
102  } catch (FileSystemException $e) {
103  if (!$this->fileExists($fileName)) {
104  throw $e;
105  } else {
110  $success = true;
111  }
112  }
113 
114  return $success;
115  }
116 
120  public function makeGenerationDirectory()
121  {
122  return $this->_makeDirectory($this->_generationDirectory);
123  }
124 
129  public function makeResultFileDirectory($className)
130  {
131  return $this->_makeDirectory($this->getResultFileDirectory($className));
132  }
133 
137  public function getGenerationDirectory()
138  {
139  return $this->_generationDirectory;
140  }
141 
146  public function fileExists($fileName)
147  {
148  return $this->filesystemDriver->isExists($fileName);
149  }
150 
158  public function includeFile($fileName)
159  {
160  return include $fileName;
161  }
162 
167  private function _makeDirectory($directory)
168  {
169  if ($this->filesystemDriver->isWritable($directory)) {
170  return true;
171  }
172  try {
173  if (!$this->filesystemDriver->isDirectory($directory)) {
174  $this->filesystemDriver->createDirectory($directory);
175  }
176  return true;
177  } catch (FileSystemException $e) {
178  return false;
179  }
180  }
181 }
defined('TESTS_BP')||define('TESTS_BP' __DIR__
Definition: _bootstrap.php:60
$fileName
Definition: translate.phtml:15
__construct(Io $ioObject=null, array $generatedEntities=[], DefinedClasses $definedClasses=null, LoggerInterface $logger=null)
Definition: Generator.php:57
if($currentSelectedMethod==$_code) $className
Definition: form.phtml:31