Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Config.php
Go to the documentation of this file.
1 <?php
7 
12 
16 class Config
17 {
23  const DIR_NAME = '_requirejs';
24 
28  const CONFIG_FILE_NAME = 'requirejs-config.js';
29 
33  const MIXINS_FILE_NAME = 'mage/requirejs/mixins.js';
34 
38  const REQUIRE_JS_FILE_NAME = 'requirejs/require.js';
39 
43  const STATIC_FILE_NAME = 'mage/requirejs/static.js';
44 
48  const MIN_RESOLVER_FILENAME = 'requirejs-min-resolver.js';
49 
53  const MAP_FILE_NAME = 'requirejs-map.js';
54 
58  const URL_RESOLVER_FILE_NAME = 'mage/requirejs/baseUrlResolver.js';
59 
63  const BUNDLE_JS_DIR = 'js/bundle';
64 
69 (function(require){
70 %function%
71 
72 %usages%
73 })(require);
75 
80 (function() {
81 %config%
82 require.config(config);
83 })();
84 
85 config;
86 
90  private $fileSource;
91 
95  private $design;
96 
100  private $readFactory;
101 
105  private $staticContext;
106 
110  private $minifyAdapter;
111 
115  private $minification;
116 
120  private $repositoryMap;
121 
131  public function __construct(
132  \Magento\Framework\RequireJs\Config\File\Collector\Aggregated $fileSource,
133  \Magento\Framework\View\DesignInterface $design,
134  ReadFactory $readFactory,
135  \Magento\Framework\View\Asset\Repository $assetRepo,
136  \Magento\Framework\Code\Minifier\AdapterInterface $minifyAdapter,
137  Minification $minification,
138  RepositoryMap $repositoryMap
139  ) {
140  $this->fileSource = $fileSource;
141  $this->design = $design;
142  $this->readFactory = $readFactory;
143  $this->staticContext = $assetRepo->getStaticViewFileContext();
144  $this->minifyAdapter = $minifyAdapter;
145  $this->minification = $minification;
146  $this->repositoryMap = $repositoryMap;
147  }
148 
154  public function getConfig()
155  {
156  $distributedConfig = '';
157  $customConfigFiles = $this->fileSource->getFiles($this->design->getDesignTheme(), self::CONFIG_FILE_NAME);
158  foreach ($customConfigFiles as $file) {
160  $fileReader = $this->readFactory->create($file->getFilename(), DriverPool::FILE);
161  $config = $fileReader->readAll($file->getName());
162  $distributedConfig .= str_replace(
163  ['%config%', '%context%'],
164  [$config, $file->getModule()],
166  );
167  }
168 
169  $fullConfig = str_replace(
170  ['%function%', '%usages%'],
171  [$distributedConfig],
172  self::FULL_CONFIG_TEMPLATE
173  );
174 
175  if ($this->minification->isEnabled('js')) {
176  $fullConfig = $this->minifyAdapter->minify($fullConfig);
177  }
178 
179  return $fullConfig;
180  }
181 
187  public function getConfigFileRelativePath()
188  {
189  return $this->staticContext->getConfigPath() . '/' . $this->getConfigFileName();
190  }
191 
197  public function getMixinsFileRelativePath()
198  {
199  $map = $this->getRepositoryFilesMap(Config::MIXINS_FILE_NAME, [
200  'area' => $this->staticContext->getAreaCode(),
201  'theme' => $this->staticContext->getThemePath(),
202  'locale' => $this->staticContext->getLocale(),
203  ]);
204  if ($map) {
205  $relativePath = implode('/', $map) . '/' . Config::MIXINS_FILE_NAME;
206  } else {
207  $relativePath = $this->staticContext->getPath() . '/' . self::MIXINS_FILE_NAME;
208  }
209  return $relativePath;
210  }
211 
218  {
219  return $this->staticContext->getConfigPath() . '/' . self::REQUIRE_JS_FILE_NAME;
220  }
221 
227  public function getBaseConfig()
228  {
229  $config = [
230  'baseUrl' => $this->staticContext->getBaseUrl() . $this->staticContext->getPath(),
231  ];
232  $config = json_encode($config, JSON_UNESCAPED_SLASHES);
233  $result = "require.config($config);";
234  return $result;
235  }
236 
242  public function getMinResolverRelativePath()
243  {
244  return
245  $this->staticContext->getConfigPath() .
246  '/' .
247  $this->minification->addMinifiedSign(self::MIN_RESOLVER_FILENAME);
248  }
249 
256  {
257  $map = $this->getRepositoryFilesMap(Config::URL_RESOLVER_FILE_NAME, [
258  'area' => $this->staticContext->getAreaCode(),
259  'theme' => $this->staticContext->getThemePath(),
260  'locale' => $this->staticContext->getLocale(),
261  ]);
262  if ($map) {
263  $relativePath = implode('/', $map) . '/' . Config::URL_RESOLVER_FILE_NAME;
264  } else {
265  $relativePath = $this->staticContext->getPath() . '/' . self::URL_RESOLVER_FILE_NAME;
266  }
267  return $relativePath;
268  }
269 
275  public function getMapFileRelativePath()
276  {
277  return $this->minification->addMinifiedSign($this->staticContext->getPath() . '/' . self::MAP_FILE_NAME);
278  }
279 
283  protected function getConfigFileName()
284  {
285  return $this->minification->addMinifiedSign(self::CONFIG_FILE_NAME);
286  }
287 
291  public function getMinResolverCode()
292  {
293  $excludes = [];
294  foreach ($this->minification->getExcludes('js') as $expression) {
295  $excludes[] = '!url.match(/' . str_replace('/', '\/', $expression) . '/)';
296  }
297  $excludesCode = empty($excludes) ? 'true' : implode('&&', $excludes);
298 
299  $result = <<<code
300  var ctx = require.s.contexts._,
301  origNameToUrl = ctx.nameToUrl;
302 
303  ctx.nameToUrl = function() {
304  var url = origNameToUrl.apply(ctx, arguments);
305  if ({$excludesCode}) {
306  url = url.replace(/(\.min)?\.js$/, '.min.js');
307  }
308  return url;
309  };
310 
311 code;
312 
313  if ($this->minification->isEnabled('js')) {
314  $result = $this->minifyAdapter->minify($result);
315  }
316  return $result;
317  }
318 
324  private function getRepositoryFilesMap($fileId, array $params)
325  {
326  return $this->repositoryMap->getMap($fileId, $params);
327  }
328 }
$config
Definition: fraud_order.php:17
__construct(\Magento\Framework\RequireJs\Config\File\Collector\Aggregated $fileSource, \Magento\Framework\View\DesignInterface $design, ReadFactory $readFactory, \Magento\Framework\View\Asset\Repository $assetRepo, \Magento\Framework\Code\Minifier\AdapterInterface $minifyAdapter, Minification $minification, RepositoryMap $repositoryMap)
Definition: Config.php:131
$relativePath
Definition: get.php:35
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE]
Definition: website.php:18