public function isValid(\Symfony\Component\Form\Form &$form)
{
$viewData = $form->getViewData();
//pour le champ hidden allFieldsAreThere de Revision
if (!is_object($viewData) && 'allFieldsAreThere' == $form->getName()) {
return true;
}
if ($viewData instanceof Revision) {
/** @var DataField $dataField */
$dataField = $viewData->getDatafield();
} elseif ($viewData instanceof DataField) {
/** @var DataField $dataField */
$dataField = $viewData;
} else {
throw new \Exception("Unforeseen type of viewData");
}
if ($dataField->getFieldType() !== null && $dataField->getFieldType()->getType() !== null) {
$dataFieldTypeClassName = $dataField->getFieldType()->getType();
/** @var DataFieldType $dataFieldType */
$dataFieldType = new $dataFieldTypeClassName();
}
$isValid = true;
if (isset($dataFieldType) && $dataFieldType->isContainer()) {
//If datafield is container or type is null => Container => Recursive
$formChildren = $form->all();
foreach ($formChildren as $child) {
if ($child instanceof \Symfony\Component\Form\Form) {
$tempIsValid = $this->isValid($child);
//Recursive
$isValid = $isValid && $tempIsValid;
}
}
if (!$isValid) {
$form->addError(new FormError("At least one child is not valid!"));
}
}
// $isValid = $isValid && $dataFieldType->isValid($dataField);
if (isset($dataFieldType) && !$dataFieldType->isValid($dataField)) {
$isValid = false;
$form->addError(new FormError("This Field is not valid! " . $dataField->getMessages()[0]));
}
return $isValid;
}