/** * Add a file asset to the queue. * * @param FileAssetInterface $asset * * @throws \InvalidArgumentException */ public function add(FileAssetInterface $asset) { $fileHasher = $this->fileHasher; $cacheHash = $fileHasher($asset->getFileName()); $asset->setCacheHash($cacheHash); if ($asset->getType() === 'javascript') { $this->javascript[$cacheHash] = $asset; } elseif ($asset->getType() === 'stylesheet') { $this->stylesheet[$cacheHash] = $asset; } else { throw new \InvalidArgumentException(sprintf('Requested asset type %s is not valid.', $asset->getType())); } }
/** * Get the relative path to the asset file. * * @param FileAssetInterface $asset * * @return string|null */ private function getAssetPath(FileAssetInterface $asset) { $fileName = $asset->getFileName(); if ($fileName === null) { throw new \RuntimeException('Extension file assets must have a file name set.'); } $app = $this->getContainer(); $filesystem = $app['filesystem']; if ($filesystem->has(sprintf('extensions://%s/web/%s', $this->getBaseDirectory()->getPath(), $fileName))) { return $this->getRelativeUrl() . $fileName; } elseif ($filesystem->has(sprintf('theme://%s', $fileName))) { return $app['resources']->getUrl('theme') . $fileName; } $message = sprintf("Couldn't add file asset '%s': File does not exist in either %s or %s directories.", $fileName, $this->getRelativeUrl(), $app['resources']->getUrl('theme')); $app['logger.system']->error($message, ['event' => 'extensions']); return $fileName; }