/** * Fetch a fields properties. * * @param \Helmut\Forms\Field $field * @return string */ public function fieldProperties($field) { $properties = ['id' => $field->id, 'form_id' => $this->id, 'type' => $field->type, 'name' => $field->name, 'label' => $field->label, 'required' => $field->isRequired(), 'valid' => $field->isValid(), 'invalid' => $field->isInvalid(), 'errors' => [], 'keys' => []]; $properties = array_merge($properties, $field->properties()); foreach ($field->keys() as $key) { $properties['keys'][] = $key; } if ($field->isInvalid()) { foreach ($field->errors() as $error => $parameters) { if ($error == 'userDefined') { foreach ($parameters as $message) { $properties['errors'][] = ['error' => $message]; } } else { $parameters['field'] = str_replace('_', ' ', $field->name); $message = $this->translate($error, $field); foreach ($parameters as $key => $value) { if (is_object($value) && method_exists($value, '__toString')) { $value = (string) $value; } if (is_array($value)) { $value = implode(', ', $value); } $message = str_replace('[' . $key . ']', $value, $message); } $properties['errors'][] = ['error' => $message]; } } } return $properties; }