public static function createFromConfig($config, $data = [], $errors = []) { $form = new Form($data, $errors); if (isset($config['fields'])) { if (isset($config['defaults']) && isset($config['defaults']['fields'])) { $field_defaults = $config['defaults']['fields'] + self::$fieldsDefaults; } else { $field_defaults = self::$fieldsDefaults; } foreach ($config['fields'] as $key => $fc) { if (!isset($fc['name'])) { trigger_error('Skipping index "' . $key . '". No name attibute.', E_USER_WARNING); continue; } extract(self::parseDynamicValues(array_replace_recursive($field_defaults, $fc))); if (!isset($data[$name]) && !is_null($default)) { $data[$name] = $default; } if ($required) { $attributes["required"] = "required"; } $field = $form->addField($type, $name, $label, $choices, $group, $attributes, $container_attributes, $html); } $form->setData($data); if (isset($config['layout'])) { $form->setGroupLayout($config['layout']); } if (isset($config['groups'])) { foreach ($config['groups'] as $groupname => $groupconfig) { $groupconfig = array_replace_recursive(self::$groupsDefaults, $groupconfig); $form->defineGroup($groupname, $groupconfig['label'], $groupconfig['attributes']); } } } return $form; }