/**
  * {@inheritdoc}
  */
 public function findAll()
 {
     $all = array();
     $files = $this->findFiles();
     $file_cache = FileCacheFactory::get('yaml_discovery:' . $this->fileCacheKeySuffix);
     // Try to load from the file cache first.
     foreach ($file_cache->getMultiple(array_keys($files)) as $file => $data) {
         $all[$files[$file]][$this->getIdentifier($file, $data)] = $data;
         unset($files[$file]);
     }
     // If there are files left that were not returned from the cache, load and
     // parse them now. This list was flipped above and is keyed by filename.
     if ($files) {
         foreach ($files as $file => $provider) {
             // If a file is empty or its contents are commented out, return an empty
             // array instead of NULL for type consistency.
             try {
                 $data = Yaml::decode(file_get_contents($file)) ?: [];
             } catch (InvalidDataTypeException $e) {
                 throw new DiscoveryException("The {$file} contains invalid YAML", 0, $e);
             }
             $data[static::FILE_KEY] = $file;
             $all[$provider][$this->getIdentifier($file, $data)] = $data;
             $file_cache->set($file, $data);
         }
     }
     return $all;
 }
 /**
  * Constructs a new instance.
  *
  * @param string[] $plugin_namespaces
  *   (optional) An array of namespace that may contain plugin implementations.
  *   Defaults to an empty array.
  * @param string $plugin_definition_annotation_name
  *   (optional) The name of the annotation that contains the plugin definition.
  *   Defaults to 'Drupal\Component\Annotation\Plugin'.
  * @param string[] $annotation_namespaces
  *   (optional) Additional namespaces to be scanned for annotation classes.
  */
 function __construct($plugin_namespaces = array(), $plugin_definition_annotation_name = 'Drupal\\Component\\Annotation\\Plugin', array $annotation_namespaces = [])
 {
     $this->pluginNamespaces = $plugin_namespaces;
     $this->pluginDefinitionAnnotationName = $plugin_definition_annotation_name;
     $this->annotationNamespaces = $annotation_namespaces;
     $file_cache_suffix = str_replace('\\', '_', $plugin_definition_annotation_name);
     $file_cache_suffix .= ':' . hash('crc32b', serialize($annotation_namespaces));
     $this->fileCache = FileCacheFactory::get('annotation_discovery:' . $file_cache_suffix);
 }
예제 #3
0
 /**
  * Constructs a new FileStorage.
  *
  * @param string $directory
  *   A directory path to use for reading and writing of configuration files.
  * @param string $collection
  *   (optional) The collection to store configuration in. Defaults to the
  *   default collection.
  */
 public function __construct($directory, $collection = StorageInterface::DEFAULT_COLLECTION)
 {
     $this->directory = $directory;
     $this->collection = $collection;
     // Use a NULL File Cache backend by default. This will ensure only the
     // internal statc caching of FileCache is used and thus avoids blowing up
     // the APCu cache.
     $this->fileCache = FileCacheFactory::get('config', ['cache_backend_class' => NULL]);
 }
 /**
  * {@inheritdoc}
  */
 public function findAll()
 {
     $all = array();
     $files = $this->findFiles();
     $provider_by_files = array_flip($files);
     $file_cache = FileCacheFactory::get('yaml_discovery:' . $this->name);
     // Try to load from the file cache first.
     foreach ($file_cache->getMultiple($files) as $file => $data) {
         $all[$provider_by_files[$file]] = $data;
         unset($provider_by_files[$file]);
     }
     // If there are files left that were not returned from the cache, load and
     // parse them now. This list was flipped above and is keyed by filename.
     if ($provider_by_files) {
         foreach ($provider_by_files as $file => $provider) {
             // If a file is empty or its contents are commented out, return an empty
             // array instead of NULL for type consistency.
             $all[$provider] = Yaml::decode(file_get_contents($file)) ?: [];
             $file_cache->set($file, $all[$provider]);
         }
     }
     return $all;
 }
예제 #5
0
파일: WebTestBase.php 프로젝트: Wylbur/gj
 /**
  * Changes parameters in the services.yml file.
  *
  * @param $name
  *   The name of the parameter.
  * @param $value
  *   The value of the parameter.
  */
 protected function setContainerParameter($name, $value)
 {
     $filename = $this->siteDirectory . '/services.yml';
     chmod($filename, 0666);
     $services = Yaml::decode(file_get_contents($filename));
     $services['parameters'][$name] = $value;
     file_put_contents($filename, Yaml::encode($services));
     // Ensure that the cache is deleted for the yaml file loader.
     $file_cache = FileCacheFactory::get('container_yaml_loader');
     $file_cache->delete($filename);
 }
예제 #6
0
 /**
  * Constructs a new ExtensionDiscovery object.
  *
  * @param string $root
  *   The app root.
  * @param bool $use_file_cache
  *   Whether file cache should be used.
  * @param string[] $profile_directories
  *   The available profile directories
  * @param string $site_path
  *   The path to the site.
  */
 public function __construct($root, $use_file_cache = TRUE, $profile_directories = NULL, $site_path = NULL)
 {
     $this->root = $root;
     $this->fileCache = $use_file_cache ? FileCacheFactory::get('extension_discovery') : NULL;
     $this->profileDirectories = $profile_directories;
     $this->sitePath = $site_path;
 }
예제 #7
0
 /**
  * Constructs a new ExtensionDiscovery object.
  *
  * @param string $root
  *   The app root.
  */
 public function __construct($root)
 {
     $this->root = $root;
     $this->fileCache = FileCacheFactory::get('extension_discovery');
 }
예제 #8
0
 public function __construct(ContainerBuilder $container)
 {
     $this->container = $container;
     $this->fileCache = FileCacheFactory::get('container_yaml_loader');
 }
예제 #9
0
 /**
  * @covers ::get
  *
  * @expectedException \InvalidArgumentException
  * @expectedExceptionMessage Required prefix configuration is missing
  */
 public function testGetNoPrefix()
 {
     FileCacheFactory::setPrefix(NULL);
     FileCacheFactory::get('test_foo_settings', []);
 }
예제 #10
0
 /**
  * @covers ::get
  *
  * @dataProvider configurationDataProvider
  */
 public function testGetConfigurationOverrides($configuration, $arguments, $class)
 {
     FileCacheFactory::setConfiguration($configuration);
     $file_cache = FileCacheFactory::get('test_foo_settings', $arguments);
     $this->assertInstanceOf($class, $file_cache);
 }