|
@@ -37,4 +37,70 @@ abstract class Extension implements ExtensionInterface
|
|
|
|
|
|
$this->$method($config, $configuration);
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 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 A config array
|
|
|
+ * @param key The key to normalize
|
|
|
+ */
|
|
|
+ public static function normalizeConfig($config, $key)
|
|
|
+ {
|
|
|
+ $values = array();
|
|
|
+ if (isset($config[$key.'s'])) {
|
|
|
+ $values = $config[$key.'s'];
|
|
|
+ } 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;
|
|
|
+ }
|
|
|
}
|