diff --git a/src/Drupal/FormGeneratorDrupal.php b/src/Drupal/FormGeneratorDrupal.php index b4154fa..39f67be 100644 --- a/src/Drupal/FormGeneratorDrupal.php +++ b/src/Drupal/FormGeneratorDrupal.php @@ -49,7 +49,7 @@ public function doTransform($data, Context $context = NULL) { */ public function getInputValidator() { // Validate the JSON-Schema input. - return new JsonSchemaFormValidator(new Validator()); + return new JsonSchemaFormValidator(new Validator(), Constraint::CHECK_MODE_TYPE_CAST); } /** diff --git a/src/Drupal/FormValidatorDrupal.php b/src/Drupal/FormValidatorDrupal.php index 7760e3d..11e7d4c 100644 --- a/src/Drupal/FormValidatorDrupal.php +++ b/src/Drupal/FormValidatorDrupal.php @@ -7,6 +7,7 @@ use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Render\Element; use Drupal\Core\StringTranslation\TranslatableMarkup; +use JsonSchema\Constraints\Constraint; use JsonSchema\Validator; use SchemaForms\ArrayToStdClass; use SchemaForms\RecursiveTypeCaster; @@ -38,7 +39,10 @@ public static function validateWithSchema(array &$element, FormStateInterface $f } $validator = new Validator(); // Validate the massaged data against the schema. - $num_errors = $validator->validate($data, $schema); + if ($data === null) { + $data = []; + } + $num_errors = $validator->validate($data, $schema, Constraint::CHECK_MODE_TYPE_CAST); if ($num_errors) { // Build the mappings of paths to form paths. $mappings = static::buildMappingsElementPaths($element, $element['#array_parents']); diff --git a/src/JsonSchemaFormValidator.php b/src/JsonSchemaFormValidator.php index b995c6e..4d9491c 100644 --- a/src/JsonSchemaFormValidator.php +++ b/src/JsonSchemaFormValidator.php @@ -23,8 +23,7 @@ public function __construct(Validator $validator, $mode = NULL) { */ public function isValid($data) { return parent::isValid($data) - && $data->type === 'object' - && (bool) $data->properties; + && $data->type === 'object'; } }