|
@@ -11,8 +11,6 @@
|
|
|
|
|
|
namespace Symfony\Component\Config\Definition;
|
|
namespace Symfony\Component\Config\Definition;
|
|
|
|
|
|
-use Symfony\Component\DependencyInjection\Extension\Extension;
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* This class is the entry point for config normalization/merging/finalization.
|
|
* This class is the entry point for config normalization/merging/finalization.
|
|
*
|
|
*
|
|
@@ -29,7 +27,7 @@ class Processor
|
|
*/
|
|
*/
|
|
public function process(NodeInterface $configTree, array $configs)
|
|
public function process(NodeInterface $configTree, array $configs)
|
|
{
|
|
{
|
|
- $configs = Extension::normalizeKeys($configs);
|
|
|
|
|
|
+ $configs = self::normalizeKeys($configs);
|
|
|
|
|
|
$currentConfig = array();
|
|
$currentConfig = array();
|
|
foreach ($configs as $config) {
|
|
foreach ($configs as $config) {
|
|
@@ -39,4 +37,77 @@ class Processor
|
|
|
|
|
|
return $configTree->finalize($currentConfig);
|
|
return $configTree->finalize($currentConfig);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * This method normalizes keys between the different configuration formats
|
|
|
|
+ *
|
|
|
|
+ * Namely, you mostly have foo_bar in YAML while you have foo-bar in XML.
|
|
|
|
+ * After running this method, all keys are normalized to foo_bar.
|
|
|
|
+ *
|
|
|
|
+ * If you have a mixed key like foo-bar_moo, it will not be altered.
|
|
|
|
+ * The key will also not be altered if the target key already exists.
|
|
|
|
+ *
|
|
|
|
+ * @param array $config
|
|
|
|
+ *
|
|
|
|
+ * @return array the config with normalized keys
|
|
|
|
+ */
|
|
|
|
+ public static function normalizeKeys(array $config)
|
|
|
|
+ {
|
|
|
|
+ foreach ($config as $key => $value) {
|
|
|
|
+ if (is_array($value)) {
|
|
|
|
+ $config[$key] = self::normalizeKeys($value);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (false !== strpos($key, '-') && false === strpos($key, '_') && !array_key_exists($normalizedKey = str_replace('-', '_', $key), $config)) {
|
|
|
|
+ $config[$normalizedKey] = $config[$key];
|
|
|
|
+ unset($config[$key]);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return $config;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * Normalizes a configuration entry.
|
|
|
|
+ *
|
|
|
|
+ * This method returns a normalize configuration array for a given key
|
|
|
|
+ * to remove the differences due to the original format (YAML and XML mainly).
|
|
|
|
+ *
|
|
|
|
+ * Here is an example.
|
|
|
|
+ *
|
|
|
|
+ * The configuration is XML:
|
|
|
|
+ *
|
|
|
|
+ * <twig:extension id="twig.extension.foo" />
|
|
|
|
+ * <twig:extension id="twig.extension.bar" />
|
|
|
|
+ *
|
|
|
|
+ * And the same configuration in YAML:
|
|
|
|
+ *
|
|
|
|
+ * twig.extensions: ['twig.extension.foo', 'twig.extension.bar']
|
|
|
|
+ *
|
|
|
|
+ * @param array $config A config array
|
|
|
|
+ * @param string $key The key to normalize
|
|
|
|
+ * @param string $plural The plural form of the key if it is irregular
|
|
|
|
+ *
|
|
|
|
+ * @return array
|
|
|
|
+ */
|
|
|
|
+ public static function normalizeConfig($config, $key, $plural = null)
|
|
|
|
+ {
|
|
|
|
+ if (null === $plural) {
|
|
|
|
+ $plural = $key.'s';
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $values = array();
|
|
|
|
+ if (isset($config[$plural])) {
|
|
|
|
+ $values = $config[$plural];
|
|
|
|
+ } elseif (isset($config[$key])) {
|
|
|
|
+ if (is_string($config[$key]) || !is_int(key($config[$key]))) {
|
|
|
|
+ // only one
|
|
|
|
+ $values = array($config[$key]);
|
|
|
|
+ } else {
|
|
|
|
+ $values = $config[$key];
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return $values;
|
|
|
|
+ }
|
|
}
|
|
}
|