public function getAssets($resource, $previousContext = null) { if (!is_string($resource)) { throw new InvalidResourceException('Expected string filename as resource', $resource); } elseif (!is_file($resource) || !is_readable($resource) || !stream_is_local($resource)) { throw new InvalidResourceException('File not found, not readable or not local', $resource); } if ($previousContext !== null) { if (!is_array($previousContext) || !isset($previousContext['modified_at']) || !is_int($previousContext['modified_at']) || !isset($previousContext['assets']) || !is_array($previousContext['assets'])) { throw new InvalidContextException('Expected context with int `modified_at` and array `assets`', $previousContext); } if ($previousContext['modified_at'] === filemtime($resource)) { $assetResult = new AssetResult(); $assetResult->setAssets($previousContext['assets']); $assetResult->setContext($previousContext); return $assetResult; } } try { $tokens = $this->twig->tokenize(file_get_contents($resource), $resource); $node = $this->twig->parse($tokens); } catch (SyntaxException $exception) { $this->errorHandler->processException(new ResourceParsingException('Got twig syntax exception while parsing', 0, $exception)); return new AssetResult(); } $assets = $this->loadNode($node, $resource); $assetResult = new AssetResult(); $assetResult->setAssets($assets); $assetResult->setContext(array('modified_at' => filemtime($resource), 'assets' => $assets)); return $assetResult; }
public function getAssets($resource, $previousContext = null) { $internalResources = array(); foreach ($this->collectionResource->getInternalResources($resource) as $internalResource) { $internalResourceKey = json_encode($internalResource); $internalResources[$internalResourceKey] = $internalResource; } $result = new AssetResult(); $context = array(); $internalContexts = $this->getResourceContexts(array_keys($internalResources), $previousContext); foreach ($internalResources as $internalResourceKey => $internalResource) { $internalContext = isset($internalContexts[$internalResourceKey]) ? $internalContexts[$internalResourceKey] : null; $internalResult = $this->internalResourceProvider->getAssets($internalResource, $internalContext); $result->addAssets($internalResult->getAssets()); $context[$internalResourceKey] = $internalResult->getContext(); } $result->setContext($context); return $result; }