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;
}
/** * @param array $settings * @return FormInterface */ public static function create(array $settings = array()) { /** @var ObjectManagerInterface $objectManager */ $objectManager = GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Object\\ObjectManager'); $className = get_called_class(); /** @var FormInterface $object */ $object = $objectManager->get($className); foreach ($settings as $settingName => $settingValue) { $setterMethodName = ObjectAccess::buildSetterMethodName($settingName); if (TRUE === method_exists($object, $setterMethodName)) { ObjectAccess::setProperty($object, $settingName, $settingValue); } } if (TRUE === $object instanceof FieldContainerInterface && TRUE === isset($settings['fields'])) { foreach ($settings['fields'] as $fieldName => $fieldSettings) { if (FALSE === isset($fieldSettings['name'])) { $fieldSettings['name'] = $fieldName; } $field = AbstractFormField::create($fieldSettings); $object->add($field); } } return $object; }