/** * Creates a form field object from name and configuration. */ protected function makeFormField($name, $config) { $label = isset($config['label']) ? $config['label'] : null; $field = new FormField($name, $label); $field->arrayName = $this->arrayName; $field->idPrefix = $this->getId(); /* * Simple widget field, only widget type is supplied */ if (is_string($config) && $this->isFormWidget($config) !== false) { $field->displayAs('widget', ['widget' => $config]); return $field; } elseif (is_string($config)) { $field->displayAs($config); return $field; } /* * Defined field type */ $fieldType = isset($config['type']) ? $config['type'] : null; if (!is_string($fieldType) && !is_null($fieldType)) { throw new ApplicationException(Lang::get('backend::lang.field.invalid_type', ['type' => gettype($fieldType)])); } /* * Process basic options */ if (isset($config['span'])) { $field->span($config['span']); } if (isset($config['context'])) { $field->context = $config['context']; } if (isset($config['size'])) { $field->size($config['size']); } if (isset($config['tab'])) { $field->tab($config['tab']); } if (isset($config['commentAbove'])) { $field->comment($config['commentAbove'], 'above'); } if (isset($config['comment'])) { $field->comment($config['comment']); } if (isset($config['placeholder'])) { $field->placeholder = $config['placeholder']; } if (isset($config['default'])) { $field->defaults = $config['default']; } if (isset($config['cssClass'])) { $field->cssClass = $config['cssClass']; } if (isset($config['attributes'])) { $field->attributes = $config['attributes']; } if (isset($config['path'])) { $field->path = $config['path']; } if (array_key_exists('required', $config)) { $field->required = $config['required']; } if (array_key_exists('disabled', $config)) { $field->disabled = $config['disabled']; } if (array_key_exists('stretch', $config)) { $field->stretch = $config['stretch']; } /* * Set field value */ $field->value = $this->getFieldValue($field); /* * Widget with options */ if ($this->isFormWidget($fieldType) !== false) { $fieldOptions = isset($config['options']) ? $config['options'] : []; $fieldOptions['widget'] = $fieldType; $field->displayAs('widget', $fieldOptions); } elseif (strlen($fieldType)) { $fieldOptions = isset($config['options']) ? $config['options'] : null; $studlyField = studly_case(strtolower($fieldType)); if (method_exists($this, 'eval' . $studlyField . 'Options')) { $fieldOptions = $this->{'eval' . $studlyField . 'Options'}($field, $fieldOptions); } $field->displayAs($fieldType, $fieldOptions); } return $field; }