예제 #1
0
 /**
  * @inheritdoc
  */
 public function process(ParserInterface $parser, string $file, array $data) : array
 {
     if (false === array_key_exists('include', $data)) {
         throw InvalidArgumentExceptionFactory::createForNoIncludeStatementInData($file);
     }
     $include = $data['include'];
     unset($data['include']);
     if (null === $include) {
         return $data;
     }
     if (false === is_array($include)) {
         throw TypeErrorFactory::createForInvalidIncludeStatementInData($include, $file);
     }
     foreach ($include as $includeFile) {
         if (false === is_string($includeFile)) {
             throw TypeErrorFactory::createForInvalidIncludedFilesInData($includeFile, $file);
         }
         if (0 === strlen($includeFile)) {
             throw InvalidArgumentExceptionFactory::createForEmptyIncludedFileInData($file);
         }
         $filePathToInclude = $this->fileLocator->locate($includeFile, dirname($file));
         $fileToIncludeData = $parser->parse($filePathToInclude);
         if (array_key_exists('include', $fileToIncludeData)) {
             $fileToIncludeData = $this->process($parser, $file, $fileToIncludeData);
         }
         $data = $this->dataMerger->mergeInclude($data, $fileToIncludeData);
     }
     return $data;
 }
예제 #2
0
 /**
  * @inheritdoc
  */
 public function parse(string $file) : array
 {
     try {
         $realPath = $this->fileLocator->locate($file);
     } catch (FileNotFoundException $exception) {
         throw InvalidArgumentExceptionFactory::createForFileCouldNotBeFound($file, 0, $exception);
     }
     if (array_key_exists($realPath, $this->cache)) {
         return $this->cache[$realPath];
     }
     $data = $this->parser->parse($realPath);
     if (array_key_exists('include', $data)) {
         $data = $this->includeProcessor->process($this, $file, $data);
     }
     $this->cache[$realPath] = $data;
     return $data;
 }
예제 #3
0
 /**
  * @inheritdoc
  */
 public function loadFile(string $file, array $parameters = [], array $objects = []) : ObjectSet
 {
     $data = $this->parser->parse($file);
     return $this->dataLoader->loadData($data, $parameters, $objects);
 }