i.e. if $setting follows the expected format.
public isDynamicSetting ( string $setting ) : boolean | ||
$setting | string | |
return | boolean |
/** * Adds dynamic settings notation support: $<paramName>[;<namespace>[;<scope>]]$. * * {@inheritdoc} */ protected function parseInput($input, array $options = array()) { if ($this->dynamicSettingParser->isDynamicSetting($input)) { $parsedSettings = $this->dynamicSettingParser->parseDynamicSetting($input); $input = $this->configResolver->getParameter($parsedSettings['param'], $parsedSettings['namespace'], $parsedSettings['scope']); if (is_array($input)) { $collection = $this->createAssetCollection(array(), $options); foreach ($input as $file) { $collection->add(parent::parseInput($file, $options)); } return $collection; } } return parent::parseInput($input, $options); }
/** * Builds the proxy client, taking dynamically defined servers into account. * * @param array $servers * @param string $baseUrl * * @return \FOS\HttpCache\ProxyClient\Varnish */ public function buildProxyClient(array $servers, $baseUrl) { $allServers = array(); foreach ($servers as $server) { if (!$this->dynamicSettingParser->isDynamicSetting($server)) { $allServers[] = $server; continue; } $settings = $this->dynamicSettingParser->parseDynamicSetting($server); $configuredServers = $this->configResolver->getParameter($settings['param'], $settings['namespace'], $settings['scope']); $allServers = array_merge($allServers, (array) $configuredServers); } $class = $this->proxyClientClass; return new $class($allServers, $baseUrl); }
public function process(ContainerBuilder $container) { $dynamicSettingsServices = array(); $resettableServices = array(); $updateableServices = $container->getParameter('ezpublish.config_resolver.updateable_services'); // Pass #1 Loop against all arguments of all service definitions to replace dynamic settings by the fake service. foreach ($container->getDefinitions() as $serviceId => $definition) { // Constructor injection $replaceArguments = array(); foreach ($definition->getArguments() as $i => $arg) { if (!$this->dynamicSettingParser->isDynamicSetting($arg)) { continue; } // Decorators use index_X for their key if (strpos($i, 'index') === 0) { $i = (int) substr($i, strlen('index_')); } $replaceArguments[$i] = $this->createExpression($this->dynamicSettingParser->parseDynamicSetting($arg)); } if (!empty($replaceArguments)) { $dynamicSettingsServices[$serviceId] = true; foreach ($replaceArguments as $i => $arg) { $definition->replaceArgument($i, $arg); } } // Setter injection $methodCalls = $definition->getMethodCalls(); foreach ($methodCalls as $i => &$call) { list($method, $callArgs) = $call; $callHasDynamicSetting = false; foreach ($callArgs as &$callArg) { if (!$this->dynamicSettingParser->isDynamicSetting($callArg)) { continue; } $callArg = $this->createExpression($this->dynamicSettingParser->parseDynamicSetting($callArg)); $callHasDynamicSetting = true; } $call = array($method, $callArgs); if ($callHasDynamicSetting) { // We only support single dynamic setting injection for updatable services. if (count($callArgs) == 1) { $updateableServices[$serviceId][] = [$method, (string) $callArgs[0]]; } else { // Method call has more than 1 argument, so we will reset it instead of updating it. $dynamicSettingsServices[$serviceId] = true; // Ensure current service is not registered as updatable service. unset($updateableServices[$serviceId]); } } } $definition->setMethodCalls($methodCalls); } // Pass #2 Loop again, to get all services depending on dynamic settings services. foreach ($container->getDefinitions() as $id => $definition) { $isDependent = false; foreach ($definition->getArguments() as $arg) { if (!($arg instanceof Reference && isset($dynamicSettingsServices[(string) $arg]))) { continue; } $isDependent = true; break; } if ($isDependent) { $resettableServices[] = $id; } } $resettableServices = array_unique(array_merge(array_keys($dynamicSettingsServices), $resettableServices)); $container->setParameter('ezpublish.config_resolver.resettable_services', $resettableServices); $container->setParameter('ezpublish.config_resolver.updateable_services', $updateableServices); }
public function process(ContainerBuilder $container) { $dynamicSettingsServices = array(); $resettableServices = array(); $fakeServices = array(); // Pass #1 Loop against all arguments of all service definitions to replace dynamic settings by the fake service. foreach ($container->getDefinitions() as $serviceId => $definition) { // Constructor injection $replaceArguments = array(); foreach ($definition->getArguments() as $i => $arg) { if (!$this->dynamicSettingParser->isDynamicSetting($arg)) { continue; } // Decorators use index_X for their key if (strpos($i, 'index') === 0) { $i = (int) substr($i, strlen('index_')); } $fakeServiceId = $this->injectFakeService($container, $this->getConfigResolverArgs($arg)); $replaceArguments[$i] = new Reference($fakeServiceId, ContainerInterface::NULL_ON_INVALID_REFERENCE); $fakeServices[] = $fakeServiceId; } if (!empty($replaceArguments)) { $dynamicSettingsServices[$serviceId] = true; foreach ($replaceArguments as $i => $arg) { $definition->replaceArgument($i, $arg); } } // Setter injection $methodCalls = $definition->getMethodCalls(); foreach ($methodCalls as $i => &$call) { list($method, $callArgs) = $call; foreach ($callArgs as &$callArg) { if (!$this->dynamicSettingParser->isDynamicSetting($callArg)) { continue; } $fakeServiceId = $this->injectFakeService($container, $this->getConfigResolverArgs($callArg)); $callArg = new Reference($fakeServiceId, ContainerInterface::NULL_ON_INVALID_REFERENCE); $fakeServices[] = $fakeServiceId; } $call = array($method, $callArgs); } $definition->setMethodCalls($methodCalls); } // Pass #2 Loop again, to get all services depending on dynamic settings services. foreach ($container->getDefinitions() as $id => $definition) { $isDependent = false; foreach ($definition->getArguments() as $arg) { if (!($arg instanceof Reference && isset($dynamicSettingsServices[(string) $arg]))) { continue; } $isDependent = true; break; } if ($isDependent) { $resettableServices[] = $id; } } $resettableServices = array_unique(array_merge(array_keys($dynamicSettingsServices), $resettableServices)); $container->setParameter('ezpublish.config_resolver.resettable_services', $resettableServices); $container->setParameter('ezpublish.config_resolver.dynamic_settings_services', array_unique($fakeServices)); }