public function applyClasses(array $classNames, $value, $params = [])
{
if (!is_scalar($value)) {
throw new \InvalidArgumentException(sprintf('Value is not a scalar, is a "%s"', is_object($value) ? get_class($value) : gettype($value)));
}
foreach ($classNames as $class) {
if (!isset($this->classes[$class])) {
throw new \InvalidArgumentException(sprintf('Unknown class "%s", known classNames: "%s"', $class, implode('", "', array_keys($this->classes))));
}
$classDefinition = $this->classes[$class];
try {
foreach ($classDefinition as $formatDefinition) {
if (!isset($formatDefinition[1])) {
$formatDefinition[1] = [];
}
list($formatName, $formatConfig) = $formatDefinition;
$formatConfig = $this->substituteTokens($formatConfig, $params);
$format = $this->formatRegistry->get($formatName);
$defaultOptions = $format->getDefaultOptions();
$diff = array_diff(array_keys($formatConfig), array_keys($defaultOptions));
if ($diff) {
throw new \InvalidArgumentException(sprintf('Invalid options "%s" for format "%s", valid options: "%s"', implode('", "', $diff), $formatName, implode('", "', array_keys($defaultOptions))));
}
$formatConfig = array_merge($defaultOptions, $formatConfig);
$value = $format->format($value, $formatConfig);
}
} catch (\InvalidArgumentException $e) {
throw new \InvalidArgumentException(sprintf('Could not load class definition: %s (format %s)', json_encode($classDefinition), $formatName), null, $e);
}
}
return $value;
}