/** * @param string type * @param $node * @return FormField */ public function fieldFactory($type, $node) { // Instantiate a field object $field = new FormField(strtolower($type)); // Get predifined attributes like id $attributes = $this->transpileAttributes($node->getNode(0), ['type', 'name', 'value']); $field->setAttributes($attributes); // Pattern validation callback if (array_key_exists('pattern', $attributes)) { $pattern = $attributes['pattern']; $field->setValidationCallback(function ($value) use($pattern, $field) { $validationResult = preg_match('/' . $pattern . '/', $value); if ($validationResult) { return false; // it's valid! } return true; }); } // Add value $field->setDefault($node->attr('value'))->setName(str_replace('\\"', '', $node->attr('name'))); // Set madatory if required if (array_key_exists('required', $attributes)) { $field->setMandatory(true); } return $field; }