ensureIsPhp($fileInfo); $containerBuilder = new ContainerBuilder(); $fileLoader = $this->createFileLoader($fileInfo, $containerBuilder); $fileLoader->load($fileInfo->getRealPath()); $parameterBag = $containerBuilder->getParameterBag(); return $this->arrayToHash($containerBuilder->getDefinitions()) . $this->arrayToHash($parameterBag->all()); } private function ensureIsPhp(SmartFileInfo $fileInfo): void { if ($fileInfo->hasSuffixes(['php'])) { return; } throw new ShouldNotHappenException(sprintf( // getRealPath() cannot be used, as it breaks in phar 'Provide only PHP file, ready for Symfony Dependency Injection. "%s" given', $fileInfo->getRelativeFilePath() )); } private function createFileLoader(SmartFileInfo $fileInfo, ContainerBuilder $containerBuilder): LoaderInterface { $fileLocator = new FileLocator([$fileInfo->getPath()]); $fileLoaders = [ new GlobFileLoader($containerBuilder, $fileLocator), new PhpFileLoader($containerBuilder, $fileLocator), ]; $loaderResolver = new LoaderResolver($fileLoaders); $loader = $loaderResolver->resolve($fileInfo->getRealPath()); if (! $loader) { throw new ShouldNotHappenException(); } return $loader; } /** * @param mixed[] $array */ private function arrayToHash(array $array): string { $serializedArray = serialize($array); return md5($serializedArray); } }