public function __construct($htmlForm, Factory $factory = null, array $defaultValues = [])
{
$this->factory = $factory ?: new Factory();
// Create new doc
$this->document = new DOMDocument('1.0', 'utf-8');
// Ignore invalid tag errors during loading (e.g. datalist)
libxml_use_internal_errors(true);
// Enforce UTF-8 encoding and don't add missing doctype, html and body
$this->document->loadHTML('<?xml version="1.0" encoding="UTF-8"?>' . $htmlForm, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
libxml_use_internal_errors(false);
// Inject default values (from models etc)
$this->setData($defaultValues, true);
}