public static function create(array $settings = array())
{
/** @var ObjectManagerInterface $objectManager */
$objectManager = GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager');
if ('Section' === $settings['type']) {
return Section::create($settings);
} else {
$prefix = 'FluidTYPO3\\Flux\\Form\\Field\\';
$type = $settings['type'];
$className = str_replace('/', '\\', $type);
$className = TRUE === class_exists($prefix . $className) ? $prefix . $className : $className;
}
if (FALSE === class_exists($className)) {
$className = $settings['type'];
}
if (FALSE === class_exists($className)) {
throw new \RuntimeException('Invalid class- or type-name used in type of field "' . $settings['name'] . '"; "' . $className . '" is invalid', 1375373527);
}
/** @var FormInterface $object */
$object = $objectManager->get($className);
foreach ($settings as $settingName => $settingValue) {
$setterMethodName = 'set' . ucfirst($settingName);
if (TRUE === method_exists($object, $setterMethodName)) {
call_user_func_array(array($object, $setterMethodName), array($settingValue));
}
}
return $object;
}